从Django的RawQuerySet获取数据库游标

Ric*_*kyA 3 python django

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

tweets = TweetX.objects.raw("SELECT * from twitter_tweet").using("twittertest")
Run Code Online (Sandbox Code Playgroud)

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

for tweet in tweets:
   #do stuff
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*kyA 5

似乎说服django/postgres使用数据库游标是相当困难的.相反,它取出所有内容,然后将客户端迭代器(称为游标)放在上面.

找到了解决方案 这里明确地创建一个数据库光标.唯一的缺点是它不再适合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
Run Code Online (Sandbox Code Playgroud)