Я пытаюсь экспортировать большой файл из Netezza (используя Netezza ODBC + pyodbc), это решение бросает памятьError, если я петлю без «списка», это ОЧЕНЬ медленно. есть ли у вас какое-либо представление о промежуточном решении, которое не убивает мой сервер/процесс python, но может работать быстрее?Экспорт 2Gb + SELECT в CSV с Python (из памяти)
cursorNZ.execute(sql)
archi = open("c:\test.csv", "w")
lista = list(cursorNZ.fetchall())
for fila in lista:
registro = ''
for campo in fila:
campo = str(campo)
registro = registro+str(campo)+";"
registro = registro[:-1]
registro = registro.replace('None','NULL')
registro = registro.replace("'NULL'","NULL")
archi.write(registro+"\n")
---- Редактировать ----
Спасибо, я пытаюсь это: Где "SQL" является запрос, cursorNZ является
connMy = pyodbc.connect(DRIVER=.....)
cursorNZ = connNZ.cursor()
chunk = 10 ** 5 # tweak this
chunks = pandas.read_sql(sql, cursorNZ, chunksize=chunk)
with open('C:/test.csv', 'a') as output:
for n, df in enumerate(chunks):
write_header = n == 0
df.to_csv(output, sep=';', header=write_header, na_rep='NULL')
Имейте это : AttributeError: объект 'pyodbc.Cursor' не имеет атрибута 'cursor' Есть идеи?
Возможный дубликат http://stackoverflow.com/questions/17707264/iterating- over-pyodbc-result-without-fetchall, особенно ссылка на [fetchmany] (http://code.google.com/p/pyodbc/wiki/Cursor#fetchmany). – tdelaney
передайте 'read_sql' ваше соединение. Я отредактирую свой ответ, чтобы отразить это. –