PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

psycopg2 et script python infini

Un pool de connexion fonctionne bien pour ce genre de chose. Je n'ai pas travaillé avec en production (en utilisant principalement Django ou SQLAlchemy), mais psycopg2.pool inclut quelques implémentations différentes (SimpleConnectionPool ou PersistentConnectionPool ) qui répondrait probablement à vos besoins. De manière générale, un pool permet non seulement de gérer les connexions en tant que ressource partagée, mais également de tester et de réinitialiser la connexion lorsque cela est nécessaire.

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)

Le putconn est extrêmement important, afin qu'une exception ne quitte pas le pool en pensant que la connexion est toujours utilisée. Ce serait bien de le gérer en tant que gestionnaire de contexte :

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)

J'espère que ça aide.