sql >> データベース >  >> RDS >> Mysql

mysqlデータベーステーブルの行をpandasDataFrameで置き換えます

    pandas 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 へのクレジット コンパイルメソッドの場合。



    1. OR条件でのLEFTJOINのインデックスの使用

    2. 断片化が実行計画に与える影響

    3. MySQLデータベースからGoogleMapsAPIv3で複数のポリゴンを描画する

    4. MYSQL文中の2つの単語を一致させる方法