【问题标题】:Not all parameters were used in the SQL statement using dataframe.to_sql并非所有参数都在使用 dataframe.to_sql 的 SQL 语句中使用
【发布时间】:2020-05-10 23:11:01
【问题描述】:

我无法使用 pandas dataframe.to_sql 诊断错误

我首先使用connection = mysql.connector.connect 建立连接

然后我尝试使用将我的数据插入到 mysql 数据库中

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

我得到错误:

Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': Not all parameters were used in the SQL statement

SData 表和 df 具有相同的字段/名称,除了表有一个自动递增的主键,所以我唯一能想到的是,由于主键,并非所有字段都匹配...

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

数据字段是:

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

DF:
FirstValue 
SecondValue 
SSID

在键入此内容时,我意识到数据框的顺序不同。不会认为这会是一个问题,但会调查这个

谢谢

【问题讨论】:

  • 您是否尝试过使用sqlalchemy.create_engine 创建连接?
  • 你提到这个很有趣,现在就这样做:) 待命
  • 它让我更进一步。我不得不切换到 pymysql 才能让它工作。现在我收到错误“'字段列表'中的未知列'索引'”。我怀疑它与数据库中的主键有关。谢谢:)

标签: mysql sql pandas dataframe


【解决方案1】:

问题是我试图使用mysql.connector 作为连接(引擎)并且不得不使用 sqlalchemy create_engine 和 mysql+pymysql。

然后我不得不 to_sql 创建一个索引字段,因此必须将 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)

谢谢

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 2020-05-25
    相关资源
    最近更新 更多