我在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所以我可以迭代结果集而不是一次性传输它?
似乎说服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)
| 归档时间: |
|
| 查看次数: |
2485 次 |
| 最近记录: |