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

MySQLでsqlalchemy接続を閉じる方法

    そのコードを正しく書く方法は次のとおりです。

    db = create_engine('mysql://[email protected]/test_database')
    for i in range(1,2000):
        conn = db.connect()
        #some simple data operations
        conn.close()
    db.dispose()
    

    つまり、Engine 工場です 接続およびプール用 接続自体ではなく、接続の。 conn.close()と言うとき 、接続はエンジン内の接続プールに戻されます 、実際には閉じていません。

    接続を実際に閉じたい場合、つまりプールしない場合は、NullPoolを介してプールを無効にします。 :

    from sqlalchemy.pool import NullPool
    db = create_engine('mysql://[email protected]/test_database', poolclass=NullPool)
    

    上記のEngine 構成、conn.close()への各呼び出し 基盤となるDBAPI接続を閉じます。

    OTOHの場合、実際に別のに接続します 各呼び出しのデータベース、つまり、ハードコードされた"localhost/test_database" これは単なる例であり、実際には多くの異なるデータベースがあり、dispose()を使用したアプローチです。 結構です;プールからチェックアウトされていないすべての接続が閉じられます。

    上記のすべての場合において、重要なことはConnection オブジェクトはclose()を介して閉じられます 。あらゆる種類の「コネクションレス」実行を使用している場合、それはengine.execute() またはstatement.execute()ResultProxy そのexecute呼び出しから返されたオブジェクトは、完全に読み取るか、close()を介して明示的に閉じる必要があります。 。 Connection またはResultProxy まだ開いていると、NullPoolが禁止されます またはdispose() 最後のすべての接続を閉じることからアプローチします。



    1. rs.last()は、転送のみの結果セットに対して無効な操作を提供します:last

    2. Oracle用のSQL挿入を生成しています

    3. AWSでMySQLまたはMariaDBを管理するためのRDSとEC2の比較

    4. isqlのコマンド履歴