Insertar el dataframe pandas en mysql usando sqlalchemy

Simplemente bash escribir un dataframe de pandas en la base de datos mysql local en ubuntu.

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') 

y aparece el error

 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  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' 

el dataframe no está vacío, la base de datos está lista sin tablas, he intentado otro método para crear una tabla en Python con mysqldb y funciona bien.

una pregunta relacionada: Escribir en la base de datos MySQL con pandas usando SQLAlchemy, to_sql pero no se explicó la razón real

Parece que estás usando una versión anterior de pandas. Hice un git bisect rápido para encontrar la versión de pandas donde la línea 53 contiene con.rollback() , y encontré pandas en v0.12, que es antes de que se agregara el soporte de SQLAlchemy a la función de execute .

Si está atrapado en esta versión de pandas, necesitará usar una conexión DBAPI sin procesar:

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

De lo contrario, actualice los pandas y use el motor como pretende. Tenga en cuenta que no necesita usar el parámetro de flavor cuando usa SQLAlchemy:

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