【问题标题】:Appending to a sql table using python panda module使用 python panda 模块附加到 sql 表
【发布时间】:2017-11-19 16:26:01
【问题描述】:

我正在尝试在 python 中使用 to_sql 命令附加到 SQL 表。一切正常,但如果我运行我的命令 more tahn,它显然会附加相同的数据。我知道这可以通过 if_exists='replace' 解决,但是当我这样做时,我得到以下错误。

ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server] 表 'table' 中的列 'AccountName' 属于无法使用的类型作为索引中的键列。(1919) (SQLExecDirectW)") [SQL: u'CREATE INDEX [ix_table_AccountName] ON table ([AccountName])']

我需要弄清楚如何,仅附加表中尚未包含的数据,删除我将要附加的数据(如果它已在表中)或如何解决我的索引问题,以便我可以使用 if_exists ='替换'

engine = create_engine('mssql+pyodbc://UN:PW@DB')
df.to_sql("table", engine,if_exists='replace')

【问题讨论】:

  • 为了解决您的索引问题,您尝试index=False了吗?
  • 您能否发布一些您正在使用的数据并举例说明什么是“已经在表格中”?我不确定这是否包括单个值或整行。

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


【解决方案1】:

您的“帐户名”列可能太长了。 对于 MSSQL,索引只能是 900 字节,因此如果使用 utf-8,则为 450 个字符。

如果该列用作索引,请尝试在 to_sql() 语句中为您的列设置较短的长度。

from sqlalchemy.types import String
[...]
df.to_sql(
[...]
    dtype={
       [...]
       'AccountName': String(255),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 2018-10-19
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多