我在 Postgres 中有一个相当大的表(20M+),我尝试对其进行原始 Django 查询:
tweets = TweetX.objects.raw("SELECT * from twitter_tweet").using("twittertest")
我很快就得到了一个 RawQuerySet,但是当我尝试迭代它的结果时,它就停止了:
for tweet in tweets:
#do stuff
内存正在稳步增加,因此我怀疑整个数据集正在被传输。
有没有办法从中获取数据库游标.raw
这样我就可以迭代结果集而无需一次传输全部内容?
看来说服 django/postgres 使用数据库游标是相当困难的。相反,它会获取所有内容,然后在其上放置一个客户端迭代器(称为游标)。
找到了解决方案over http://thebuild.com/blog/2010/12/13/very-large-result-sets-in-django-using-postgresql/ here http://thebuild.com/blog/2010/12/14/using-server-side-postgresql-cursors-in-django/显式创建一个数据库游标。唯一的缺点是它不再适合 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)