sql >> Database teknologi >  >> RDS >> PostgreSQL

psycopg2 og infinite python script

En forbindelsespool fungerer godt til den slags. Jeg har ikke arbejdet med det i produktionen (ved at bruge hovedsageligt Django eller SQLAlchemy), men psycopg2.pool indeholder et par forskellige implementeringer (SimpleConnectionPool eller PersistentConnectionPool ), der sandsynligvis ville passe til dit behov. Generelt hjælper en pulje ikke kun med at administrere forbindelser som en delt ressource, men også med at teste og geninitialisere forbindelsen, når det er nødvendigt.

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 er ekstremt vigtigt, så en undtagelse ikke forlader poolen og tror, ​​at forbindelsen stadig er i brug. Det ville være godt at håndtere det som kontekstmanager:

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)

Håber det hjælper.




  1. Sådan gendannes tilliden til en fremmednøglebegrænsning i SQL Server (T-SQL-eksempler)

  2. Sådan installeres PostgreSQL 12 på Fedora 33

  3. MySQL-opdateringsfelt baseret på min. værdi for et andet felt, når det er grupperet efter et tredje

  4. opdatere med join statement mysql?