使用 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、Python 将数据附加到 HDF5 文件

Python 3.x - 使用 for 循环将数据附加到 Pandas 数据帧

如何在 Python 中使用 Pandas 数据结构附加多个 CSV 文件

Python Pandas Dataframe:如何同时将多个索引附加到列表中?

python Pandas - 将行附加到数据帧

python - 如何将 numpy 数组附加到 pandas 数据帧