我在Postgres有一个相当大的表(20M +),我尝试对它进行原始的Django查询:
tweets = TweetX.objects.raw("SELECT * from twitter_tweet").using("twittertest")
我快速得到一个RawQuerySet,但当我试图迭代它的结果时,它正在停止:
for tweet in tweets:
#do stuff
内存正在稳步上升,所以我怀疑整个数据集正在转移。
有没有办法从.raw
获取数据库游标,这样我就可以迭代结果集而不是一次性传输它?
答案 0 :(得分:5)
似乎很难说服django / postgres使用数据库游标。相反,它取出所有内容,然后将客户端迭代器(称为游标)放在上面。
找到一个明确创建db游标的解决方案over here。唯一的缺点是它不再适合django型号。
from django.db import connections
conn = connections['twittertest']
# This is required to populate the connection object properly
if conn.connection is None:
cursor = conn.cursor()
cursor = conn.connection.cursor(name='gigantic_cursor')
cursor.execute("SELECT * from twitter_tweet")
for tweet in cursor:
#profit