我正在使用sqlalchemy写给Postgres。
import sqlalchemy
from sqlalchemy import create_engine
engine = create_engine('postgresql://postgres@localhost:5432/mydb')
我想在df
中将pandas数据框table
附加到mydb
。
两者都具有相同的列名key
和value
。
key
是table
中的主键。
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执行此操作的正确方法是什么?
答案 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."