sql >> Base de Datos >  >> RDS >> PostgreSQL

psycopg2 y script de python infinito

Un grupo de conexiones funciona bien para este tipo de cosas. No he trabajado con él en producción (usando principalmente Django o SQLAlchemy), pero psycopg2.pool incluye algunas implementaciones diferentes (SimpleConnectionPool o PersistentConnectionPool ) que probablemente se ajuste a sus necesidades. En términos generales, un grupo no solo ayuda a administrar las conexiones como un recurso compartido, sino que también prueba y reinicializa la conexión cuando es necesario.

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)

El putconn es extremadamente importante, para que una excepción no abandone el grupo pensando que la conexión todavía está en uso. Sería bueno manejarlo como administrador de contexto:

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)

Espero que ayude.