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

psycopg2と無限のPythonスクリプト

    接続プールは、この種のことにはうまく機能します。私は本番環境で(主にDjangoまたはSQLAlchemyを使用して)使用していませんが、psycopg2.pool いくつかの異なる実装が含まれています(SimpleConnectionPool またはPersistentConnectionPool )それはおそらくあなたのニーズに合うでしょう。一般的に、プールは共有リソースとしての接続の管理に役立つだけでなく、必要に応じて接続をテストして再初期化するのにも役立ちます。

    from psycopg2 import pool
    conn_pool = pool.PersistentConnectionPool(minconn, maxconn, **dbopts)
    
    def work_method():
        conn = conn_pool.getconn()
        with conn.cursor() as stmt:
            stmt.execute(sql)
        conn_pool.putconn(conn)
    

    putconn は非常に重要であるため、接続がまだ使用されていると考えて例外がプールを離れることはありません。コンテキストマネージャーとして処理するとよいでしょう:

    import contextlib
    
    @contextlib.contextmanager
    def get_db_connection():
        conn = conn_pool.getconn()
        yield conn
        conn_pool.putconn(conn)
    
    def work_method():
        with get_db_connection() as conn:
            with conn.cursor() as stmt:
                stmt.execute(sql)
    

    お役に立てば幸いです。




    1. SQLAlchemyとAlembicを使用して、データベースにテーブル列が存在するかどうかを確認します

    2. PostgreSQLがシリーズを間違った方法で組み合わせるのはなぜですか?

    3. MySQL全文期間

    4. IN句の値と同じ順序でのMySQLの順序