2

我正在尝试在 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='replace '

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

1 回答 1

0

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

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

from sqlalchemy.types import String
[...]
df.to_sql(
[...]
    dtype={
       [...]
       'AccountName': String(255),
于 2021-11-24T17:55:28.520 回答