我有 mysql 和 pandas,试图将数据帧作为表插入到 mysql 中。下面的代码插入了一个空表,但无法替换它。我使用的是 Python 3.10,使用 pip install mysqlclient 来获取 mysqldb 模块。怎么了?解决方法是什么?
这是我的代码:
import pandas as pd
import numpy as np
from Modules import connect
from sqlalchemy.orm import close_all_sessions
df = pd.DataFrame(np.ones((3, 3)))
df.columns=['a','b','c']
con_=connect.local_connect(login,password,database)
df.to_sql(name='name',con=con_,if_exists='replace',index=False)
close_all_sessions()
运行一次代码后:
mysql> select * from name;
Empty set (0.00 sec)
第二次运行后卡住了,当我检查进程列表时:
mysql> show processlist;
+----+-----------------+-----------------+------+---------+------+---------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------------+------+---------+------+---------------------------------+------------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 768 | Waiting on empty queue | NULL |
| 11 | root | localhost:10003 | database | Sleep | 146 | | NULL |
| 13 | root | localhost:10839 | database | Query | 0 | init | show processlist |
| 14 | root | localhost:12673 | database | Query | 2 | Waiting for table metadata lock | DROP TABLE name |
+----+-----------------+-----------------+------+---------+------+---------------------------------+------------------+
4 rows in set (0.00 sec)
我确实遇到了和现在一样的问题,并且偶然修复了它:)
所以,你必须通过 .to_sql() 方法中的参数 dtype 来阐明你的数据集是什么数据类型,在我的例子中,我把它作为 int ,因为整个数据集都是数字。 如果有不止一种类型,您可以创建一个字典,其中列名作为键,数据类型作为值,并将其作为 dtype 参数的参数。