我正在嘗試使用 psycopg2 中的 cursor.copy_from() 將下表匯入我的 Postgres 服務器,因為該檔案太大。
| ID | 郵件 | 姓名 |
|---|---|---|
| 1 | [email protected] | 約翰斯托克斯 |
| 2 | [email protected] | 艾米麗·雷 |
這是我的代碼:
import psycopg2
import os
conn = psycopg2.connect(
dbname = name,
user = username,
password = pwd,
host = hst,
port = 5432
)
cur = conn.cursor()
path = os.getcwd() '\users.csv'
file = open(path, 'r')
cur.copy_from(file, table_name, sep=',')
conn.commit()
conn.close()
這會將資料插入表中,但第三列中有雙引號,如下所示。
| ID | 郵件 | 姓名 |
|---|---|---|
| 1 | [email protected] | “約翰斯托克斯” |
| 2 | [email protected] | “艾米麗·雷” |
后來我發現問題出在 open() 本身。因為如果我通過做列印第一行file.readline(),我得到:
1,[email protected],“約翰斯托克斯”
我不想在我的表中使用這些雙引號。我嘗試將 cursor.execute() 與COPY FROM查詢一起使用,但它說我不是超級用戶,即使我是。
uj5u.com熱心網友回復:
使用copy_expert。那么您不是作為服務器用戶作業,而是作為客戶端用戶作業。您也可以使用WITH CSVwhich 將負責參考。copy_from并copy_to使用此處描述的文本格式COPY。
cat test.csv
1,john123@gmail.com,"John Stokes"
2,emily123@gmail.com,"Emily Ray"
create table test_csv (id integer, mail varchar, name varchar);
import psycopg2
con = psycopg2.connect(dbname="test", host='localhost', user='postgres', port=5432)
cur = con.cursor()
with open('test.csv') as f:
cur.copy_expert('COPY test_csv FROM stdin WITH CSV', f)
con.commit()
select * from test_csv ;
id | mail | name
---- -------------------- -------------
1 | john123@gmail.com | John Stokes
2 | emily123@gmail.com | Emily Ray
僅供參考,psycopg3(psycopg)這種行為發生了很大變化。請參閱此處psycopg3 COPY以了解在這種情況下如何處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/505045.html
標籤:Python PostgreSQL 文件 心理咨询师2
上一篇:檔案描述符自動更新到檔案末尾
下一篇:Python問題寫入txt檔案
