pandas to_sql 创建空表,不能替换表

问题描述 投票:0回答:1

我有 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)
python mysql pandas
1个回答
0
投票

我确实遇到了和现在一样的问题,并且偶然修复了它:)

所以,你必须通过 .to_sql() 方法中的参数 dtype 来阐明你的数据集是什么数据类型,在我的例子中,我把它作为 int ,因为整个数据集都是数字。 如果有不止一种类型,您可以创建一个字典,其中列名作为键,数据类型作为值,并将其作为 dtype 参数的参数。

© www.soinside.com 2019 - 2024. All rights reserved.