从Django的RawQuerySet获取数据库游标

时间:2013-08-22 13:21:57

标签: python django

我在Postgres有一个相当大的表(20M +),我尝试对它进行原始的Django查询:

tweets = TweetX.objects.raw("SELECT * from twitter_tweet").using("twittertest")

我快速得到一个RawQuerySet,但当我试图迭代它的结果时,它正在停止:

for tweet in tweets:
   #do stuff

内存正在稳步上升,所以我怀疑整个数据集正在转移。 有没有办法从.raw获取数据库游标,这样我就可以迭代结果集而不是一次性传输它?

1 个答案:

答案 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