2014-11-05 84 views
1

我想使用Python的熊猫to_sql命令将每月数据发送到MySQL数据库。我的程序一次运行一个月的数据,我想将新数据附加到现有的数据库上。然而,Python的给我一个错误:Python pandas to_sql'append'

_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 

更换康恩= MySQLdb.connect ...与:

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

conn = engine.connect().connection 

为什么我无法追加到数据库?

谢谢!

+0

大熊猫哪个版本您使用的? – joris 2014-11-05 20:09:57

+0

您是否尝试过传递'con = engine'而不是'con = conn'? – unutbu 2014-11-05 20:12:36

回答

4

从熊猫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') 
+0

谢谢。 另外@joris谢谢你。我更新了这两个修复程序之间的熊猫'sudo pip install --upgrade pandas',一切正常。不过,我相信主要的修复方法是更新熊猫,因为我尝试了连接到MySQL的组合,但无济于事。 – 2014-11-05 21:57:13

+0

更新大熊猫很可能解决了您的问题,但我应该注意,不过建议在任何情况下都使用sqlalchemy,因为直接使用MySQL连接对象已被弃用,并且将在未来的pandas版本中删除。 – joris 2014-11-05 22:15:39

+0

一旦我更新了熊猫,MySQL连接根本不起作用。 – 2014-11-05 22:17:47