Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用to_sql和sqlalchemy将数据帧复制到mariadb数据库_Python_Pandas_Sqlalchemy_Mariadb_Mysql Connector - Fatal编程技术网

Python 使用to_sql和sqlalchemy将数据帧复制到mariadb数据库

Python 使用to_sql和sqlalchemy将数据帧复制到mariadb数据库,python,pandas,sqlalchemy,mariadb,mysql-connector,Python,Pandas,Sqlalchemy,Mariadb,Mysql Connector,我想使用pandas函数来使用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

我想使用pandas函数来使用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'
sql从sqlite_master中选择名称时出错,其中type='table'和name='tablename'; 回溯(最近一次呼叫最后一次): 文件“/usr/lib/python3.4/code.py”,第90行,运行代码 exec(代码,self.locals) 文件“”,第1行,在 文件“/usr/lib/python3/dist packages/pandas/core/frame.py”,第1261行,在to_sql中 self,name,con,flavor=flavor,如果存在=如果存在,**kwargs) 文件“/usr/lib/python3/dist packages/pandas/io/sql.py”,第207行,在write_框架中 exists=表_exists(名称、con、味道) 文件“/usr/lib/python3/dist-packages/pandas/io/sql.py”,第275行,在表2中 返回len(tquery(query,con))>0 文件“/usr/lib/python3/dist packages/pandas/io/sql.py”,第90行,在tquery中 cur=execute(sql、con、cur=cur) 文件“/usr/lib/python3/dist packages/pandas/io/sql.py”,第44行,在execute中 cur=con.cursor() AttributeError:“引擎”对象没有属性“游标”
有人曾经犯过同样的错误。然而,在有人解决问题之前,它就消失了。您知道怎么回事吗?

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

要将
To_sql
用于旧版本的pandas,您需要将原始连接(
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引擎/连接)

通常,如果您使用的是旧pandas版本(在它支持sqlalchemy引擎之前),您可能会遇到此错误。你能显示一下pd的输出吗?它给出了0.13.1-我需要更新pandas,对吗?事实上,对于这一点,最低版本是
0.14
。或者,您可以传递原始连接(
engine.raw_connection()
)和
flavor='mysql'
(但新版本不再支持此功能)。