不是所有的参数都被用于使用dataframe.to_sql的SQL语句。

7

我在使用pandas dataframe.to_sql诊断错误时遇到了困难。

首先,我使用 connection = mysql.connector.connect 来获取连接。

然后,我尝试使用以下语句将数据插入mysql数据库:

df.to_sql('SData', con=connection, if_exists='append', chunksize=1000)

但是,出现了以下错误:

执行SQL“SELECT name FROM sqlite_master WHERE type='table' AND name=?;”失败:SQL语句中没有使用所有参数

SData表和df具有相同的字段/名称,除了表有一个自动递增的主键,因此我能想到的唯一可能就是由于主键的原因导致不是所有字段都匹配...

我还不明白为什么to_sql中会有一个select语句,除非它正在检查字段名称或类似的东西?

数据字段如下:

Database:
SID Primary key
SSID int(foreign key)
FirstValue decimal
SecondValue decimal

DF:
FirstValue 
SecondValue 
SSID

在打字的过程中,我意识到数据框的顺序不同。虽然不认为这会是一个问题,但我会进一步研究一下。
谢谢。

你尝试过使用sqlalchemy.create_engine创建连接吗? - Chris Adams
1
很有趣,你提到了那个,我正在做那个:) 请稍等 - James
1
它让我进一步了解了情况。我不得不切换到pymysql才能使其正常工作。现在我遇到了“字段列表中未知的列'index'”错误。我怀疑这与数据库中的主键有关。谢谢:) - James
1个回答

10
问题是我试图使用mysql.connector作为连接引擎,但必须使用带有mysql+pymysql的sqlalchemy create_engine。
然后,我必须设置index=False才能创建索引字段,它可以正常工作。
以下是新字符串:
import pymysql
engine = create_engine("mysql+pymysql://" + Cfg.username + ":" + Cfg.password + "@" + Cfg.host + "/" + Cfg.database)
df.to_sql('SData', con = engine, if_exists = 'append',index = False, chunksize = 1000)

谢谢


我也在尝试同样的事情,但不知道正确的方法。这个方法帮了我,非常感谢。 - Abhishek Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接