Python pandas to_sql «добавить»

Я пытаюсь отправлять ежемесячные данные в базу данных MySQL, используя команду Python pandas to_sql. Моя программа запускает данные за один месяц, и я хочу добавить новые данные в существующую базу данных. Однако Python выдает мне ошибку:

_mysql_exceptions.OperationalError: (1050, "Table 'cps_basic_tabulation' already exists")

Вот мой код для подключения и экспорта:

conn = MySQLdb.connect(host     = config.get('db', 'host'),
                       user     = config.get('db', 'user'),
                       passwd   = config.get('db', 'password'),
                       db       = 'cps_raw') 

combined.to_sql(name            = "cps_raw.cps_basic_tabulation",
               con              = conn,
               flavor           = 'mysql', 
               if_exists        = 'append')

Я также пытался использовать:

from sqlalchemy import create_engine

Замена conn = MySQLdb.connect... на:

engine = mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>

conn   = engine.connect().connection

Любые идеи о том, почему я не могу добавить в базу данных?

Спасибо!


person j riot    schedule 05.11.2014    source источник
comment
Какую версию панд вы используете?   -  person joris    schedule 05.11.2014
comment
Вы пробовали передать con=engine вместо con=conn?   -  person unutbu    schedule 05.11.2014


Ответы (1)


Начиная с pandas 0.14, вы должны предоставить непосредственно sqlalchemy engine, а не объект подключения:

engine = create_engine("mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>")
combined.to_sql("cps_raw.cps_basic_tabulation", engine, if_exists='append')
person joris    schedule 05.11.2014
comment
Спасибо. Также @joris спасибо. Я обновил pandas 'sudo pip install --upgrade pandas', между обоими этими исправлениями все сработало. Тем не менее, я считаю, что основным исправлением было обновление pandas, поскольку я пробовал комбинации подключения к MySQL безрезультатно. - person j riot; 06.11.2014
comment
Вполне возможно, что обновление pandas устранило вашу проблему, но я должен отметить, что в любом случае рекомендуется использовать sqlalchemy, поскольку прямое использование объекта подключения MySQL устарело и будет удалено в будущей версии pandas. - person joris; 06.11.2014