Python pandas to_sql 'ต่อท้าย'

ฉันกำลังพยายามส่งข้อมูลรายเดือนไปยังฐานข้อมูล MySQL โดยใช้คำสั่ง pandas to_sql ของ Python โปรแกรมของฉันรันข้อมูลครั้งละหนึ่งเดือน และฉันต้องการผนวกข้อมูลใหม่เข้ากับฐานข้อมูลที่มีอยู่ อย่างไรก็ตาม 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 ขอบคุณเช่นกัน ฉันอัปเดต 'sudo pip install --upgrade pandas' ของ pandas ระหว่างการแก้ไขทั้งสองนี้ ทุกอย่างทำงานได้ อย่างไรก็ตาม ฉันเชื่อว่าการแก้ไขหลักคือการอัปเดต pandas เนื่องจากฉันลองใช้การเชื่อมต่อกับ MySQL ผสมผสานกันโดยไม่เกิดประโยชน์ใดๆ - person j riot; 06.11.2014
comment
เป็นไปได้ที่ดีที่การอัปเดต pandas จะแก้ไขปัญหาของคุณได้ แต่ฉันควรทราบว่าอย่างไรก็ตาม ขอแนะนำให้ใช้ sqlalchemy ไม่ว่าในกรณีใด เนื่องจากการใช้อ็อบเจ็กต์การเชื่อมต่อ MySQL โดยตรงนั้นเลิกใช้แล้วและจะถูกลบออกในเวอร์ชัน pandas ในอนาคต - person joris; 06.11.2014