gpt4 book ai didi

python - 将 pandas 数据帧插入 MySQL 表 - MySQLInterfaceError : Python type list cannot be converted

转载 作者:行者123 更新时间:2023-12-05 05:52:42 24 4
gpt4 key购买 nike

我想使用下面的代码将 pandas 数据框插入到 MySQL 表中。

mydb = mysql.connector.connect(
host="localhost",
user="root",
password="pw",
database='db')

cols = "`,`".join([str(i) for i in df.columns.tolist()])
c = mydb.cursor(buffered=True)

for i,row in df.iterrows():
sql = "INSERT INTO `table` (`" +cols + "`) VALUES (" + "%s,"*(len(row)-1) + "%s)"


c.execute(sql, tuple(row)) # I've also tried (tuple(row,)) with the same result

mydb.commit()

当我运行它时,我得到以下信息:


---------------------------------------------------------------------------
MySQLInterfaceError Traceback (most recent call last)
<ipython-input-195-e2067aefba0c> in <module>
11 sql = "INSERT INTO `bas` (`" +cols + "`) VALUES (" + "%s,"*(len(row)-1) + "%s)"
12 print('row:',tuple(row))
---> 13 c.execute(str(sql), tuple(row))
14
15 # the connection is not autocommitted by default, so we must commit to save our changes

c:\programdata\miniconda3\lib\site-packages\mysql\connector\cursor_cext.py in execute(self, operation, params, multi)
255
256 if params:
--> 257 prepared = self._cnx.prepare_for_mysql(params)
258 if isinstance(prepared, dict):
259 for key, value in prepared.items():

c:\programdata\miniconda3\lib\site-packages\mysql\connector\connection_cext.py in prepare_for_mysql(self, params)
663 ]
664 else:
--> 665 result = self._cmysql.convert_to_mysql(*params)
666 elif isinstance(params, dict):
667 result = {}

MySQLInterfaceError: Python type list cannot be converted

我发现这有点令人困惑,因为我没有将任何列表插入 c.execute() - 只是一个 str (sql) 和一个元组 (row)。这不是一个可重现的例子,但如果有人知道我能做些什么来解决这个问题,我将不胜感激。

最佳答案

也许我可以帮到你。据我所知

MySQLInterfaceError: Python type list cannot be converted

表示您未能将您的列表转换为 str...我建议切换到 pymysql 库!它非常易于使用,我对此非常满意。在那里你可以很容易地附加变量或数据帧。

对于名为“df”的数据框:

sql = """INSERT INTO dummy_table(dummy1, dummy2, dummy3) VALUES(%s,%s,%s)"""
for row in df.values.tolist():
curs.execute(sql, tuple(row))
conn.commit()
conn.close()

对于要追加的单个变量(value1 等),只需创建一个元组:

sql = """INSERT INTO dummy_table(dummy1, dummy2, dummy3) VALUES(%s,%s,%s)"""
data = (value1, value2, value3)
curs.execute(sql, data)
conn.commit()
conn.close()

请注意,在尝试插入之前,您当然必须创建一个表;) dummy1 等也是您在创建表时指定的表列的名称。

关于python - 将 pandas 数据帧插入 MySQL 表 - MySQLInterfaceError : Python type list cannot be converted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70053341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com