python - 我正在尝试将数据框插入本地 MySQL 数据库
问题描述
我是 MySQL 和熊猫的新手。
我创建了一个随机数据框:
data_frame = pd.DataFrame(np.random.randint(
0, 100, size=(100, 4)), columns=list('ABCD'))
我想将它插入到我的本地 MySQL 数据库中:
db = mysql.connector.connect(host="localhost",
user='root',
password='pw123',
database='analytics',
port='3307',
auth_plugin='mysql_native_password')
data_frame.to_sql(name='test',
con=db, if_exists='append', index=False)
但我得到一个错误
pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': Not all parameters were used in the SQL statement
如果我使用 sqlalchemy:
engine = create_engine("mysql://root:pw123@localhost/analytics")
con = engine.connect()
df = pd.DataFrame(['A', 'B'], columns=['new_tablecol'])
df.to_sql(name='new_table', con=con, if_exists='append')
con.close()
我收到此错误:
sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
而且我知道我使用了正确的密码。在这一点上,我不知道如何将我的数据框插入本地数据库。
谢谢您的帮助。
解决方案
最终使用:
import pandas as pd
import numpy as np
from sqlalchemy import create_engine
engine = create_engine(
'mysql+pymysql://root:password@localhost:3307/analytics')
data_frame = pd.DataFrame(np.random.randint(
0, 100, size=(100, 4)), columns=list('ABCD'))
data_frame.to_sql('new', con=engine)
不得不进口
pip install cryptography
然后最终在我的 cronjobs 中用 to_sql 替换了 to_csv:
joined.to_sql('export_1', con=engine, if_exists = 'replace')
效果很好。
推荐阅读
- python - eBay Python Finding API 中的身份验证错误
- c - 如何在 C 中获取字符的 8 位二进制表示?
- javascript - 如何使用节点 js 为 Alexa Skill 在函数内返回 handlerinput.responsebuilder
- c++ - 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- powershell - Powershell #Requires path/to/Name.exe
- html - 特异性和 CSS 边界半径问题
- php - 灯箱插件不适用于自定义开发主题
- microservices - 桌面应用程序可以有微服务架构吗?
- php - cUrl PHP Get 请求返回 400 BAD REQUEST 但在 Postman 中工作
- sql - 在 postgresql 中使用 split_part 给出错误的结果