我有一個CSV文件,其中引用了所有條目,即帶有開頭和結尾的引號。當我導入到使用copy_from
數據庫,數據庫表中包含的數據報價,那裏有一個空項我只得到即「」列項,如下psycopg2.copy_from:從CSV導入時從文本中刪除引號
[
看到的報價是否有一種告訴copy_from忽略引號的方法,以便在我導入文件時文本週圍沒有引號,並且空條目被轉換爲Null,如下所示?
這裏是我的代碼:
with open(source_file_path) as inf:
cursor.copy_from(inf, table_name, columns=column_list, sep=',', null="None")
UPDATE:
我仍然沒有得到解決以上,但得到該文件導入我的緣故繼續寫下原始SQL代碼,並在SQLAlchemy連接和Pyscopg2的遊標中執行它,如下所示,它們都刪除引號,並在有空條目的地方放置Null。
sql = "COPY table_name (col1, col2, col3, col4) FROM '{}' DELIMITER ',' CSV HEADER".format(csv_file_path)
SQL鍊金:
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
,如果是的話,哪兩個更快?
謝謝你。我廣泛使用CSV庫,但是當我需要控制每個列和行(單元格)時,尤其是在驗證數據時,我使用它。然而,在這種情況下,數據符合所有要求,並且它在多個14GB文件中,所以如果逐行讀取,那麼當一個簡單的「copy_from」花費幾分鐘時間來吞噬這些類型的文件時,就會是'浪費時間'。 – lukik