通过sqlalchemy写入带有重复键的Postgres表

时间:2015-01-16 06:43:10

标签: python postgresql pandas sqlalchemy

我正在使用sqlalchemy写给Postgres。

import sqlalchemy
from sqlalchemy import create_engine
engine = create_engine('postgresql://postgres@localhost:5432/mydb')

我想在df中将pandas数据框table附加到mydb

两者都具有相同的列名keyvalue

keytable中的主键。

df中的一些关键值已经在table

(1)追加失败:

df.to_sql('table',engine,if_exists='append')

此失败(IntegrityError),因为df中的某些键已在table中。

(2)我将df转换为记录数组并尝试写入table

conn = engine.connect()
query=''' insert or replace into table (key,value) values (?,?) '''
conn.executemany(query,df.to_records())

这适用于sqlite(Appending Pandas dataframe to sqlite table by primary key)。

但是,它在这里失败了(ProgrammingError: syntax error at or near "or")。

使用postgres和sqlalchemy执行此操作的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

迭代记录并捕获异常似乎是最好的解决方案?

inp=df.to_records(index=True)
for i in inp: 
   q=''' insert into table (key,value) values %s '''%i
   try:
     conn.execute(q)
   except IntegrityError:
     print "Key in table."
相关问题