简体   繁体   English

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

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

I want to use the pandas function to_sql to write a dataframe into a MariaDB database. 我想使用pandas函数to_sql将数据帧写入MariaDB数据库。 My Python code inside PyCharm looks as follows: 我在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)

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? 你知道什么是错的吗?

Passing sqlalchemy engines is only supported starting from pandas 0.14.0 仅从pandas 0.14.0开始支持传递sqlalchemy引擎

To use to_sql with older pandas version, you need to pass the raw connection ( engine.raw_connection() ) and flavor='mysql' to to_sql : 要使用旧的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)

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

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

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