首页 > 解决方案 > 我正在尝试将数据框插入本地 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)")

而且我知道我使用了正确的密码。在这一点上,我不知道如何将我的数据框插入本地数据库。

谢谢您的帮助。

标签: pythonmysqlpandasdataframe

解决方案


最终使用:

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')

效果很好。


推荐阅读