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

Jak používat kurzory na straně serveru s psycopg2

Psycopg2 má pěkné rozhraní pro práci s kurzory na straně serveru. Toto je možná šablona, ​​kterou lze použít:

with psycopg2.connect(database_connection_string) as conn:
    with conn.cursor(name='name_of_cursor') as cursor:

        cursor.itersize = 20000

        query = "SELECT * FROM ..."
        cursor.execute(query)

        for row in cursor:
            # process row 

Výše uvedený kód vytvoří připojení a automaticky umístí výsledek dotazu do kurzoru na straně serveru. Hodnota itersize nastavuje počet řádků, které klient najednou stáhne dolů z kurzoru na straně serveru. Hodnota, kterou použijete, by měla vyvážit počet síťových volání a využití paměti na klientovi. Pokud jsou například vaše výsledky tři miliony, itersize hodnota 2000 (výchozí hodnota) bude mít za následek 1500 síťových volání. Pokud je paměť spotřebovaná 2000 řádky slabá, zvyšte toto číslo.

Při použití for row in cursor samozřejmě pracujete s jedním řádkem najednou, ale Psycopg2 předem načte itersize řádků najednou pro vás.

Pokud chcete použít fetchmany z nějakého důvodu můžete udělat něco takového:

while True:
    rows = cursor.fetchmany(100)
    if len(rows) > 0:
        for row in rows:
            # process row
    else:
        break

Toto použití fetchmany nespustí síťové volání na server pro další řádky, dokud nebude vyčerpána předem načtená dávka. (Toto je spletitý příklad, který neposkytuje nic nad kódem výše, ale ukazuje, jak používat fetchmany měla by být potřeba.)



  1. Mysql místo připojení k serveru vytiskne nápovědu

  2. Přepnutí oddílu na serveru SQL (T-SQL)

  3. Jak otevřít databázi v exkluzivním režimu v Accessu 2016

  4. MySQL:vnořená sada je pomalá?