pandas dataframe to mariadb database with to_sql and sqlalchemy(使用 to_sql 和 sqlalchemy 到 mariadb 数据库的 pandas 数据框)
问题描述
我想使用 pandas 函数 to_sql 将数据框写入 MariaDB 数据库.我在 PyCharm 中的 Python 代码如下所示:
I want to use the pandas function to_sql to write a dataframe into a MariaDB database. My Python code inside PyCharm looks as follows:
import pandas as pd
import mysql.connector
from sqlalchemy import create_engine
myd = pd.read_csv('/[path]/[filename].csv')
engine = create_engine('mysql+mysqlconnector://[user]:[pw]@127.0.0.1/[dbname]')
myd.to_sql(name='[tablename]', con=engine, if_exists='replace', index=False)
在控制台中执行最后一行时,出现以下错误:
When executing the last line in the console I get the following error:
Error on sql SELECT name FROM sqlite_master WHERE type='table' AND name='[tablename]';
Traceback (most recent call last):
File "/usr/lib/python3.4/code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "/usr/lib/python3/dist-packages/pandas/core/frame.py", line 1261, in to_sql
self, name, con, flavor=flavor, if_exists=if_exists, **kwargs)
File "/usr/lib/python3/dist-packages/pandas/io/sql.py", line 207, in write_frame
exists = table_exists(name, con, flavor)
File "/usr/lib/python3/dist-packages/pandas/io/sql.py", line 275, in table_exists
return len(tquery(query, con)) > 0
File "/usr/lib/python3/dist-packages/pandas/io/sql.py", line 90, in tquery
cur = execute(sql, con, cur=cur)
File "/usr/lib/python3/dist-packages/pandas/io/sql.py", line 44, in execute
cur = con.cursor()
AttributeError: 'Engine' object has no attribute 'cursor'
这里有人有同样的情况有一点错误.然而,在有人解决问题之前它就消失了.你知道怎么回事吗?
Here someone had the same error at one point. However, it had disappeared before someone solved the problem. Do you know what is wrong?
推荐答案
仅从 pandas 0.14.0 开始支持传递 sqlalchemy 引擎
Passing sqlalchemy engines is only supported starting from pandas 0.14.0
要将 to_sql
与旧版 pandas 一起使用,您需要传递原始连接 (engine.raw_connection()
) 和 flavor='mysql'代码> 到
to_sql
:
To use to_sql
with older pandas version, you need to pass the raw connection (engine.raw_connection()
) and flavor='mysql'
to to_sql
:
myd.to_sql(name='[tablename]', con=engine.raw_connection(), flavor='mysql', if_exists='replace', index=False)
但是,我建议升级您的 pandas 版本(不推荐使用传递原始连接,并且在较新的 pandas 版本中将不再支持,然后将仅支持 sqlalchemy 引擎/连接)
However, I recommend to upgrade your pandas version (passing raw connections is deprecated and will not be supported anymore in newer pandas versions, then only sqlalchemy engines/connections will be supported)
这篇关于使用 to_sql 和 sqlalchemy 到 mariadb 数据库的 pandas 数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 to_sql 和 sqlalchemy 到 mariadb 数据库的 pandas 数据框


基础教程推荐
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 筛选NumPy数组 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01