簡體   English   中英

使用sqlalchemy將pandas dataframe插入mysql

[英]Insert pandas dataframe to mysql using sqlalchemy

我只是嘗試將pandas數據幀寫入ubuntu上的本地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'

數據幀不是空的,數據庫已經准備好沒有表,我已經嘗試了使用mysqldb在python中創建表的其他方法,並且它工作正常。

一個相關的問題: 使用SQLAlchemy,to_sql用pandas寫入MySQL數據庫,但沒有解釋實際原因

您似乎使用的是舊版本的pandas。 我做了一個快速的git bisect來找到pandas的版本,其中第53行包含con.rollback() ,並在v0.12找到pandas,這是在SQLAlchemy支持被添加到execute函數之前。

如果您堅持使用此版本的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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM