Мне удалось извлечь строки размером до 3,5 млн. Из таблицы postgres, используя python и записать в файл. Однако процесс очень медленный, и я уверен, что он не самый эффективный. Ниже мой код:Как извлечь все строки из большой таблицы postgres, используя python эффективно?
import psycopg2, time,csv
conn_string = "host='compute-1.amazonaws.com' dbname='re' user='data' password='reck' port=5433"
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
quert = '''select data from table;'''
cursor.execute(quert)
def get_data():
while True:
recs = cursor.fetchmany(10000)
if not recs:
break
for columns in recs:
# do transformation of data here
yield(columns)
solr_input=get_data()
with open('prc_ind.csv','a') as fh:
for i in solr_input:
count += 1
if count % 1000 == 0:
print(count)
a,b,c,d = i['Skills'],i['Id'],i['History'],i['Industry']
fh.write("{0}|{1}|{2}|{3}\n".format(a,b,c,d))
Таблица имеет около 8 мил строк. Я хочу спросить, есть ли лучший, более быстрый и менее интенсивный в памяти способ сделать это.
Вы профилированные это? Где узкое место и каковы ограничения на время/память/процессор/диск? –
Возможно, просто сделайте дамп через Postgres для этой задачи – Sergius
, если это ваши реальные учетные данные db. Я предлагаю вам удалить этот вопрос, изменить свои учетные данные на сервере (и в любом месте вашего кода) и снова вставить свой вопрос (без db полномочия). –