PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да използвате курсори от страна на сървъра с psycopg2

Psycopg2 има приятен интерфейс за работа с курсори от страна на сървъра. Това е възможен шаблон за използване:

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 

Кодът по-горе създава връзката и автоматично поставя резултата от заявката в курсор от страна на сървъра. Стойността itersize задава броя на редовете, които клиентът ще изтегли наведнъж от курсора от страната на сървъра. Стойността, която използвате, трябва да балансира броя на мрежовите повиквания спрямо използването на паметта на клиента. Например, ако резултатът ви е три милиона, itersize стойност 2000 (стойността по подразбиране) ще доведе до 1500 мрежови повиквания. Ако паметта, консумирана от 2000 реда, е малка, увеличете този брой.

Когато използвате for row in cursor вие, разбира се, работите с един ред наведнъж, но Psycopg2 ще извлече предварително itersize редове наведнъж за вас.

Ако искате да използвате fetchmany по някаква причина можете да направите нещо подобно:

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

Това използване на fetchmany няма да задейства мрежово повикване към сървъра за повече редове, докато предварително изтегленият пакет не бъде изчерпан. (Това е сложен пример, който не предоставя нищо повече от кода по-горе, но демонстрира как да използвате fetchmany ако има нужда.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django израз на заявка за изчислени полета, които изискват условия и кастинг

  2. Преглед на база данни в Heroku

  3. Седмици между две дати

  4. Писане на функция в SQL за преминаване през диапазон от дати в UDF

  5. Postgresql пълнотекстово търсене за чешки език (няма езикова конфигурация по подразбиране)