使用SQLAlchemy、MySQL和Pandas读取帧

9

我正在尝试连接到一个MySQL数据库,使用选项1可以正常工作:

from sqlalchemy import create_engine
engine = create_engine('mysql://root:root@localhost/lend', echo=True)
cnx = engine.connect()
x = cnx.execute("SELECT * FROM user")

但在这里出现了问题:

from pandas.io import sql
xx = sql.read_frame("SELECT * FROM user", cnx)
cnx.close()

出现了AttributeError: 'Connection' object has no attribute 'rollback'错误。


3个回答

19
你需要一个原始的数据库连接,而不是一个 Connection 实例。要获取它,请调用 engine.raw_connection()engine.connect().connection
from pandas.io import sql
#cnx = engine.connect().connection # option-1
cnx = engine.raw_connection() # option-2
xx = sql.read_frame("SELECT * FROM user", cnx)
cnx.close()

11
更新一下,我认为从pandas 0.14版本开始,你现在可以直接使用一个引擎:xx = sql.read_sql("SELECT * FROM user", engine)。请查看文档 - Midnighter
2
@Midnighter:确实,这是我现在大部分时间使用它的方式。 - van

1

这是一个老问题,但显然仍然相关。因此,从2018年开始解决这个问题的方法就是直接使用引擎:

xx = sql.read_sql("SELECT * FROM user", engine)

(原始评论由Midnighter发布)


1
使用MySQLdb模块创建连接。目前正在进行不断的进展以改善SQL支持,包括sqlalchemy,但尚未准备好。
如果您熟悉安装pandas的开发版本,您可能想关注该链接问题,并在合并后尽快切换到使用pandas的开发版本。虽然pandas的SQL支持可用,但在广泛使用Pandas + SQL时可能会出现一些数据类型、缺失值等方面的错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接