【问题标题】:Insert pandas dataframe to mysql using sqlalchemy使用 sqlalchemy 将 pandas 数据框插入 mysql
【发布时间】:2016-10-04 07:06:00
【问题描述】:

我只是尝试在 ubuntu 上将 pandas 数据帧写入本地 mysql 数据库。

from sqlalchemy import create_engine
import tushare as ts

df = ts.get_tick_data('600848', date='2014-12-22')
engine = create_engine('mysql://user:passwd@127.0.0.1/db_name?charset=utf8')
df.to_sql('tick_data',engine, flavor = 'mysql', if_exists= 'append')

它会弹出错误

biggreyhairboy@ubuntu:~/git/python/fjb$ python tushareDB.py 
Error on sql SHOW TABLES LIKE 'tick_data'
Traceback (most recent call last):
 File "tushareDB.py", line 13, in <module>
   df.to_sql('tick_data', con = engine,flavor ='mysql', if_exists= 'append')
  File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 1261, in to_sql
    self, name, con, flavor=flavor, if_exists=if_exists, **kwargs)
  File "/usr/lib/python2.7/dist-packages/pandas/io/sql.py", line 207, in write_frame
    exists = table_exists(name, con, flavor)
  File "/usr/lib/python2.7/dist-packages/pandas/io/sql.py", line 275, in table_exists
    return len(tquery(query, con)) > 0
  File "/usr/lib/python2.7/dist-packages/pandas/io/sql.py", line 90, in tquery
    cur = execute(sql, con, cur=cur)
  File "/usr/lib/python2.7/dist-packages/pandas/io/sql.py", line 53, in execute
    con.rollback()
AttributeError: 'Engine' object has no attribute 'rollback'

数据框不为空,数据库已准备好没有表,我尝试了其他方法在 python 中使用 mysqldb 创建表,它工作正常。

一个相关的问题: Writing to MySQL database with pandas using SQLAlchemy, to_sql 但没有解释实际原因

【问题讨论】:

  • 将来如果您发布遇到问题的模块版本会很有帮助。

标签: python mysql pandas sqlalchemy


【解决方案1】:

您似乎使用的是旧版本的 pandas。我做了一个快速的 git bisect 来找到第 53 行包含 con.rollback() 的 pandas 版本,并在 v0.12 找到了 pandas,这是在向 execute 函数添加 SQLAlchemy 支持之前。

如果您卡在这个版本的 pandas 上,您需要使用原始 DBAPI 连接:

df.to_sql('tick_data', engine.raw_connection(), flavor='mysql', if_exists='append')

否则,请更新 pandas 并按照您的意愿使用引擎。注意,使用 SQLAlchemy 时不需要使用flavor 参数:

df.to_sql('tick_data', engine, if_exists='append')

【讨论】:

  • 原始连接和将 pandas 更新到 0.18.1 版都解决了这个问题。
  • 但是你不应该在 Pandas 0.18.1 上使用原始连接。你试过没有?
  • 抱歉不清楚,我在升级熊猫之前使用原始连接。
猜你喜欢
  • 2018-07-19
  • 2020-02-02
  • 2021-01-01
  • 2018-09-05
  • 2017-12-30
  • 2015-11-06
  • 1970-01-01
  • 2015-08-18
  • 2013-12-08
相关资源
最近更新 更多