Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

THAY THẾ các hàng trong bảng cơ sở dữ liệu mysql với gấu trúc DataFrame

Với việc phát hành gấu trúc 0.24.0, hiện đã có cách chính thức để đạt được điều này bằng cách chuyển phương thức chèn tùy chỉnh vào to_sql hàm số.

Tôi đã có thể đạt được hành vi REPLACE INTO bằng cách chuyển có thể gọi này tới 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)

Bạn sẽ vượt qua nó như vậy:

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

Ngoài ra, nếu bạn muốn hoạt động của INSERT ... ON DUPLICATE KEY UPDATE ... thay vào đó, bạn có thể sử dụng cái này:

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)

Tín dụng cho https://stackoverflow.com/a/11762400/1919794 cho phương thức biên dịch.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn các kết quả khác biệt hàng đầu được sắp xếp theo tần suất

  2. Cách tôi lưu và truy xuất hình ảnh trên máy chủ của mình trong ứng dụng web java

  3. Làm thế nào để bạn kết hợp các số chẵn của chữ cái hoặc số lẻ của chữ cái bằng cách sử dụng regexp cho mysql

  4. Sử dụng Python và MySQL trong Quy trình ETL

  5. Kết xuất tất cả các bảng ở định dạng CSV bằng cách sử dụng 'mysqldump'