2016-07-01 4 views
1

Я хочу использовать функцию pandas to_sql для записи данных в базу данных MariaDB. Мой код Python внутри PyCharm выглядит следующим образом:pandas dataframe в базу данных mariadb с to_sql и sqlalchemy

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' 

Here кто имел такую ​​же ошибку в одной точке. Однако он исчез, прежде чем кто-то решил проблему. Вы знаете, что не так?

+0

Обычно вы можете получить эту ошибку, если используете старую версию pandas (до того, как она поддерживает движки sqlalchemy). Можете ли вы показать вывод 'pd .__ version__'? – joris

+0

Что дает 0.13.1 - Мне нужно обновить панды, не так ли? – nluckn

+0

Действительно, для этого минимальная версия составляет '0.14'. Или иначе вы можете передать необработанное соединение ('' engine.raw_connection() '') и 'flavor = 'mysql'' (но это больше не поддерживается в более новых версиях). – joris

ответ

2

Передача SQLAlchemy двигателей поддерживается только начиная с панд 0.14.0

Чтобы использовать to_sql с более старыми версиями панд, вам необходимо пройти необработанное соединение (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)

Смежные вопросы