Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

GANTI baris dalam tabel database mysql dengan pandas DataFrame

Dengan rilis pandas 0.24.0, sekarang ada cara resmi untuk mencapai ini dengan meneruskan metode penyisipan khusus ke to_sql fungsi.

Saya dapat mencapai perilaku REPLACE INTO dengan meneruskan callable ini ke 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)

Anda akan melewatinya seperti ini:

df.to_sql(db, if_exists='append', method=mysql_replace_into)

Atau, jika Anda menginginkan perilaku INSERT ... ON DUPLICATE KEY UPDATE ... sebagai gantinya, Anda dapat menggunakan ini:

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)

Penghargaan untuk https://stackoverflow.com/a/11762400/1919794 untuk metode kompilasi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mySQL pilih kode pos dalam x km/mil dalam jangkauan y

  2. Variabel tidak terdefinisi:POST - PHP dan MySQL

  3. Apakah mysql_real_escape_string() dan mysql_escape_string() cukup untuk keamanan aplikasi?

  4. Alias ​​​​untuk Menampilkan Tabel Hasil MySQL

  5. Bisakah saya yakin dengan Last Insert Id dari Mysql?