2016-04-05 4 views
1

Скажем, у меня всего 1 ГБ памяти и 1 ТБ на жестком диске.Psycopg2 cursor.execute возвращает генератор

Это мой код, и я использую базу данных postgres.

import psycopg2 

try: 
    db = psycopg2.connect("database parameters") 
    conn = db.cursor() 
    conn.execute(query) 

    #At this point, i am running 
    for row in conn: 

для этого случая, я думаю, можно с уверенностью предположить, что соед является генератором, как я не могу найти окончательный ответ в Интернете, и я не могу попробовать его на моем окружении, как я не могу позволить себе систему к краху.

Я ожидаю этот запрос, возвращающий данные сверх 100 ГБ

Я использую Python 2.7 и psycopg2 библиотеки

+0

Почему бы не написать запрос, который возвращает только один результат, и попробуйте '(isinstance (gen, types.GeneratorType)' в соответствии с [этим ответом] (http://stackoverflow.com/questions/6416538/how-to-check -if-an-object-is-an-generator-object-in-python)? Это должно сразу сказать вам, если 'conn.execute()' возвращает генератор. –

ответ

3

Если вы используете анонимный курсор, который вы делаете в вашем примере, потом весь результат запроса будет считан в память.

Если вы используете named cursor, тогда он будет читать с сервера в кусках, когда он будет перебирать данные.

Смежные вопросы