我有一个CSV文件,其中包含所有引用的条目,即带有开始和结束引号。当我使用copy_from
导入到数据库时,数据库表包含数据的引号,并且在有空条目的地方我只得到引号,即""列中的条目如下所示
[
有没有办法告诉copy_from忽略引号,这样当我导入文件时,文本周围没有引号,空条目转换为Null,如下所示?
这是我的代码:
with open(source_file_path) as inf:
cursor.copy_from(inf, table_name, columns=column_list, sep=',', null="None")
更新:
我仍然无法获得上述解决方案但是为了获取文件导入我继续编写原始SQL代码并在SQLAlchemy连接和Pyscopg2的光标中执行它,如下所示他们都删除了引号,并将Null放在有空条目的地方。
sql = "COPY table_name (col1, col2, col3, col4) FROM '{}' DELIMITER ',' CSV HEADER".format(csv_file_path)
SQL Alchemy:
conn = engine.connect()
trans = conn.begin()
conn.execute(sql)
trans.commit()
conn.close()
Psycopg2:
conn = psycopg2.connect(pg_conn_string)
conn.set_isolation_level(0)
cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
cursor = conn.cursor()
cursor.execute(sql)
虽然仍然希望copy_from
函数能够正常工作,但现在我想知道上述两个函数是否与copy_from
一样快,如果是这样,两者中的哪一个更快?