पांडा 0.24.0 के रिलीज के साथ, अब एक आधिकारिक तरीका
to_sql
. में एक कस्टम इंसर्ट विधि पास करके इसे प्राप्त करने के लिए समारोह।
मैं REPLACE INTO
. के व्यवहार को प्राप्त करने में सक्षम था इस कॉल करने योग्य को to_sql
. पर पास करके :
def mysql_replace_into(table, conn, keys, data_iter):
from sqlalchemy.dialects.mysql import insert
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql.expression import Insert
@compiles(Insert)
def replace_string(insert, compiler, **kw):
s = compiler.visit_insert(insert, **kw)
s = s.replace("INSERT INTO", "REPLACE INTO")
return s
data = [dict(zip(keys, row)) for row in data_iter]
conn.execute(table.table.insert(replace_string=""), data)
आप इसे इस तरह पास करेंगे:
df.to_sql(db, if_exists='append', method=mysql_replace_into)
वैकल्पिक रूप से, यदि आप INSERT ... ON DUPLICATE KEY UPDATE ...
का व्यवहार चाहते हैं इसके बजाय, आप इसका उपयोग कर सकते हैं:
def mysql_replace_into(table, conn, keys, data_iter):
from sqlalchemy.dialects.mysql import insert
data = [dict(zip(keys, row)) for row in data_iter]
stmt = insert(table.table).values(data)
update_stmt = stmt.on_duplicate_key_update(**dict(zip(stmt.inserted.keys(),
stmt.inserted.values())))
conn.execute(update_stmt)
https://stackoverflow.com/a/11762400/1919794 को श्रेय संकलन विधि के लिए।