Простой код для записи файла CSV в базу данных MySQL с Python и SqlAlchemy съедает слишком много оперативной памяти.Любая лучшая практика для решения? - PullRequest
2 голосов
/ 28 ноября 2011

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

input_reader = csv.reader(open(filename), delimiter=',', quotechar='"')
count = 0
for line in input_reader:
    obj = ObjectToEnter(line[1], line[2])
    child_obj = ChildObject(line[5]) #possibly a few children are entered
    obj.relation.append(child_obj)
    session.add(obj)
    count += 1
session.commit()

Это просто пожирает память, и мой инстинкт говорит, что может быть зафиксировать каждые 500 объектов с чем-то вроде if count% 500 == 0: session.commit ()

Вопрос в том, фиксирует ли каждый x ряд или, может быть, сбрасывает время от времени, что может помочь с проблемой?Есть ли какая-то лучшая практика, которую я здесь пропускаю?Обратите внимание, что этот точный код прекрасно работает с меньшим набором данных, который может поместиться в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...