我正在使用psycopg2
中的copy_expert
方法将数据从CSV文件复制到postgresql表。我有这样的postgres表格:
create table my_table (
cola text,
colb text,
colc text,
cold text,
cole text,
colf text,
colg text
)
以及一个包含前五列数据的CSV,如下所示:
^{pr2}$我想复制前五列的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
和{
看起来有几种方法可以做到这一点,首先将我需要的列添加到数据中,然后上载更新的数据。在
使用
petl
包:这在小数据上可以正常工作,但在大数据上却慢得令人难以置信。}命令似乎执行得更快,因为它们使用了
^{pr2}$psycopg2
copy_from
和{postgresql
大容量复制。我可以使用copy_from
复制我的数据,方法是先将csv文件转换成pandas
dataframe
:为了使用
psycopg2
copy_
命令,我需要使用read()
和readline()
方法将dataframe
转换为类似文件的对象,我可以使用StringIO
:请注意,您需要将缓冲区的
pos
设置为0,因为pandas.to_csv
似乎在默认情况下将pos设置为结束。有关说明,请参见this SO answer。在然后我可以复制缓冲区对象:
相关问题 更多 >
编程相关推荐