【问题标题】:Using pandas to_sql to append data frame to an existing table in sql server gives IntegrityError使用 pandas to_sql 将数据框附加到 sql server 中的现有表会产生 IntegrityError
【发布时间】:2020-06-05 23:18:22
【问题描述】:

我尝试将我的 pandas 数据框附加到 sql server 中的现有数据表中,如下所示。我在数据中的所有列名都与数据库表完全相同。

df.to_sql(table_name,engine,schema_name,index=False,method='multi',if_exists='append',chunksize=100)

但它失败了,我收到如下错误:

IntegrityError: ('23000', "[23000] [Microsoft][ODBC Driver 17 for SQL Server]
[SQL Server]Cannot insert explicit value for identity column in table 'table_name' 
when IDENTITY_INSERT is set to OFF. (544) (SQLParamData)")

我不知道这意味着什么,我应该怎么做才能让它发挥作用。看起来问题是IDENTITY_INSERT is set to OFF?。感谢是否有人可以帮助我理解为什么以及我可以做什么。谢谢。

【问题讨论】:

    标签: sql-server pandas pandas-to-sql


    【解决方案1】:

    用外行的话来说,数据框由主键值组成,并且数据库中不允许这种插入作为INDENTITY_INSERT is set to OFF。这意味着主键将由数据库本身生成。另一点是主键可能在数据框和数据库中重复,您不能在表中添加重复的主键。

    您有两个选择: 首先:检查数据库,哪一列是您的主键列或标识列,一旦确定从您的数据框中删除该列,然后尝试将其保存到数据库中。

    第二步:打开 INDENTITY INSERT SET IDENTITY_INSERT Table1 ON 并重试。 如果您的数据框不包含唯一的主键,您可能还会收到另一个错误。

    如果您在尝试这两个选项后遇到错误,请使用df.head(5) 使用表架构和数据框值更新您的问题

    【讨论】:

    • 那么问题来了,如何通过引擎执行SET IDENTITY_INSERT Table1 ON
    • @SidKwakkel 怎么样?有什么想法吗?
    • @SidKwakkel 如文档 docs.microsoft.com/en-us/sql/t-sql/statements/… 中所述,您只需在 sql 服务器中输入命令 SET IDENTITY_INSERT Table1 ON。只是一个类似select * from table的sql语句。
    • 是的。但是熊猫呢? 'to_sql' 使用引擎,而我尝试执行上述查询但它不起作用。
    猜你喜欢
    • 2020-06-23
    • 2018-07-13
    • 1970-01-01
    • 2016-10-30
    • 2021-03-02
    • 2019-01-03
    • 2018-05-04
    相关资源
    最近更新 更多