2013-08-22 39 views
3

获取数据库游标我Postgres里有一个相当大的表(20M +)是我尝试做就可以了原料的Django查询:从Django的RawQuerySet

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

我得到一个RawQuerySet快,但是当我尝试迭代在其结果它正在研究到停止:

for tweet in tweets: 
    #do stuff 

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

+0

如果相同的查询不能从pgsql提示符运行得很快,那么首先应该检查postgresql服务器。另外我不知道Django ORM如何翻译“select *”,但最好做一个选择colA,colB .... – 2013-08-22 13:50:44

回答

4

看来,要说服django/postgres使用数据库游标是相当困难的。相反,它会获取所有内容,然后将一个客户端迭代器(称为光标)放在它上面。

找到了明确创建数据库游标的解决方案overhere。唯一的缺点是它不再适合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