使用psycopg2模块向数据库插入值时出错。

7

我正在尝试使用与SQLAlchemy一起使用的psycopg2模块将数据帧插入到我的Postgres数据库中。该过程是将Excel文件加载到Pandas数据帧中,然后通过预定义的表架构将数据帧插入到数据库中。

我相信以下是相关的代码行:

post_meta.reflect(schema="users")
df = pd.read_excel(path) 
table = sql.Table(table_name, post_meta, schema="users")
dict_items = df.to_dict(orient='records')
connection.execute(table.insert().values(dict_items))

我遇到了以下错误:
<class 'sqlalchemy.exc.ProgrammingError'>, ProgrammingError("(psycopg2.ProgrammingError) can't adapt type 'numpy.int64'",)

数据帧中的所有数据字段类型都是int64。

我似乎找不到类似的问题或关于为什么会出现此错误以及其含义的信息。

任何方向都可以。谢谢。

2个回答

4

看起来你正在尝试插入numpy整数,而psycopg2不知道如何处理这些对象。你需要先将它们转换为普通的Python整数。也许可以尝试在每个值上调用int()函数...如果失败,请提供更多带有代码的上下文。


1
好的,我会尝试。虽然这很奇怪,因为我传递了另一个表,大多数都是int64类型,而那个可以正常工作。 - OAK
我不知道如何将值作为 int() 发送,因为这些值与字典混淆了。你是指遍历字典并逐个发送值吗? - OAK

3

我也遇到了这个错误,后来发现我试图将整数数据插入到SqlAlchemy Numeric列中,它映射到浮点而不是整型。将DataFrame中有问题的列更改为float就可以解决问题:

df[col] = df[col].astype(float)

也许您也正在尝试将整数数据插入到非整数列中?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接