orm.Article.objects.iterator()
Это запускает весь запрос и сохраняет результат в памяти? Или извлекать строки из базы данных по одной за раз?
Полагаю, все сразу. Посмотрите, можете ли вы заменить этот цикл курсором базы данных, который извлекает данные инкрементно:
Например: http://docs.python.org/library/sqlite3.html#sqlite3.Cursor.fetchmany
db = blah.connect("host='%s' dbname='%s' user='%s' password='%s'" % ...
new, old = db.cursor(), db.cursor()
old.execute("""
SELECT *
FROM whatever
""")
for row in old.fetchmany(size=500):
(col1, col2, col3...) = row
new = db.cursor()
new.execute("""
INSERT INTO yourtable (
col1, col2, col3...)
VALUES (
%s, %s, %s, %s, %s)
""",(col1, col2, col3,...))
new.close()
old.close()
Это будет медленно. Я взял это из моего автономного сценария миграции, так что ymmv.
fetchmany является стандартным (PEP249). Я не сделал именно то, что вы ищете, так что из этого примера еще предстоит проделать небольшую работу: я не зацикливался на цикле - чтобы получить наборы по 500 до конца - так что вам нужно решить это для себя.