sql >> Databáze >  >> RDS >> PostgreSQL

psycopg2 a nekonečný python skript

Pro tento druh věcí dobře funguje fond připojení. Nepracoval jsem s tím ve výrobě (hlavně používám Django nebo SQLAlchemy), ale psycopg2.pool obsahuje několik různých implementací (SimpleConnectionPool nebo PersistentConnectionPool ), což by pravděpodobně vyhovovalo vašim potřebám. Obecně řečeno, fond nejen pomáhá se správou připojení jako sdíleného prostředku, ale také testuje a znovu inicializuje připojení, když je potřeba.

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 je extrémně důležité, aby výjimka neopustila fond, protože si myslel, že připojení je stále používáno. Bylo by dobré to zvládnout jako kontextový manažer:

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)

Doufám, že to pomůže.




  1. SQL:Like vs Contains – různé výsledky

  2. Převeďte mapu Google v2 na mapu Google v3

  3. Postup odstranění pouze v případě, že je databáze vyšší než sysdate

  4. phpMyAdmin hází #2002 nelze se přihlásit k serveru mysql phpmyadmin