sql >> Database >  >> RDS >> PostgreSQL

psycopg2 en oneindig python-script

Een verbindingspool werkt goed voor dit soort dingen. Ik heb er in de productie niet mee gewerkt (voornamelijk met Django of SQLAlchemy), maar psycopg2.pool bevat een paar verschillende implementaties (SimpleConnectionPool of PersistentConnectionPool ) die waarschijnlijk aan uw behoeften voldoet. Over het algemeen helpt een pool niet alleen bij het beheren van verbindingen als een gedeelde bron, maar ook bij het testen en opnieuw initialiseren van de verbinding wanneer dat nodig is.

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)

De putconn is uiterst belangrijk, zodat een uitzondering de pool niet verlaat met het idee dat de verbinding nog steeds in gebruik is. Zou goed zijn om het als contextmanager aan te pakken:

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)

Ik hoop dat dat helpt.




  1. ORA verwijderen / afkappen

  2. MySQL-gegevens weergeven aan klanten zodra ze inloggen

  3. De conversie van een varchar-gegevenstype naar een datetime-gegevenstype resulteerde in een waardefout buiten het bereik

  4. combineer twee select-instructie in twee kolommen?