我在psycopg2
中使用copy_expert
方法將數據從CSV文件複製到postgresql表格。我有Postgres的表是這樣的:Psycopg2:將CSV數據複製到帶有額外列值的表格
create table my_table (
cola text,
colb text,
colc text,
cold text,
cole text,
colf text,
colg text
)
和含有類似數據這樣的第5列的CSV:
cola,colb,colc,cold,cole
1,foo,a,10,vvv
2,bar,b,20,www
3,baz,c,30,xxx
4,boo,d,40,yyy
5,baa,e,50,zzz
我想CSV數據複製的前五列,而還指定值爲colf
和colg
(每行應具有相同的值colf
和colg
)。
我可以複製前五列到我的表是這樣的:
conn = psycopg2.connect('dbname=name user=username')
cur = conn.cursor()
copy_sql = """
copy my_table (cola, colb, colc, cold, cole)
from stdin with
csv
header
delimiter as ','
"""
from_csv = '/path/to/data.csv'
with open(from_csv, 'r') as f:
cur.copy_expert(sql=copy_sql, file=f)
conn.commit()
cur.close()
如何我也使用Python的最後兩列指定值?我知道我可以在表中DDL指定默認值,就像這樣:
create table my_table (
cola text,
colb text,
colc text,
cold text,
cole text,
colf text default 'foo',
colg text default 'bar'
)
但我想補充使用python的值,因爲每個CSV上傳將有自己的價值觀爲colf
和colg
,和這些值是由我的Python代碼中的邏輯確定的。