使用 python panda 模块附加到 sql 表

Posted

技术标签:

【中文标题】使用 python panda 模块附加到 sql 表【英文标题】:Appending to a sql table using python panda module 【发布时间】: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了吗? 您能否发布一些您正在使用的数据并举例说明什么是“已经在表格中”?我不确定这是否包括单个值或整行。 【参考方案1】:

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

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

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

【讨论】:

以上是关于使用 python panda 模块附加到 sql 表的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 根据条件将 csv 值附加到列表

尝试使用 pandas 数据框将数据附加到 BigQuery 表时出错

如何使用 pandas 将新的数据帧行附加到 csv?

使用 Pandas、Python 将数据附加到 HDF5 文件

我可以使用pandas附加到压缩流吗?

使用 pandas 将不同位置的行附加到现有的 csv 文件