繁体   English   中英

使用to_sql和sqlalchemy将pandas数据帧添加到mariadb数据库

[英]pandas dataframe to mariadb database with to_sql and sqlalchemy

我想使用pandas函数to_sql将数据帧写入MariaDB数据库。 我在PyCharm中的Python代码如下所示:

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)

在控制台中执行最后一行时,我收到以下错误:

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'

这里有人在某一点上有同样的错误。 然而,在有人解决问题之前,它已经消失了。 你知道什么是错的吗?

仅从pandas 0.14.0开始支持传递sqlalchemy引擎

要使用旧的pandas版本的to_sql ,您需要将原始连接( engine.raw_connection() )和flavor='mysql'传递给to_sql

myd.to_sql(name='[tablename]', con=engine.raw_connection(), flavor='mysql', if_exists='replace', index=False)

但是,我建议升级你的pandas版本(不推荐使用原始连接,在新的pandas版本中不再支持,那么只支持sqlalchemy引擎/连接)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM