【问题标题】:error inserting values to db with psycopg2 module使用 psycopg2 模块将值插入数据库时​​出错
【发布时间】:2017-05-17 21:34:23
【问题描述】:

我正在尝试使用与 sqlalchemy 一起使用的 pscycopg2 模块将数据帧插入到我的 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'",)

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

我似乎找不到类似的问题或信息来说明为什么会出现此错误以及它的含义。

任何方向都会很棒。 谢谢

【问题讨论】:

    标签: python postgresql sqlalchemy psycopg2


    【解决方案1】:

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

    【讨论】:

    • 好的,我试试。虽然这很奇怪,因为我正在传递另一个表,大多数都是 int64 类型的,而且效果很好。
    • 我不明白如何将值作为int() 发送,因为这些值与字典混淆。您的意思是遍历字典并一一发送值吗?
    【解决方案2】:

    我也遇到了这个错误,然后意识到我试图将整数数据插入到 SqlAlchemy Numeric 列中,该列映射到 float,而不是 int。将有问题的 DataFrame 列更改为浮动对我来说是诀窍: df[col] = df[col].astype(float)

    也许您还尝试将整数数据插入非整数列?

    【讨论】:

    • 拯救了我的一天,谢谢!
    猜你喜欢
    • 2021-01-10
    • 2019-10-11
    • 1970-01-01
    • 2020-09-03
    • 2016-09-05
    • 1970-01-01
    • 2018-08-21
    • 2017-11-20
    • 1970-01-01
    相关资源
    最近更新 更多