Django优化

时间:2013-02-01 09:56:28

标签: python django django-models

我在Django中用原始sql写的查询.. 假设该查询的结果已分配给变量 queryResult

然后我循环使用 queryResult ,然后使用django ORM从几乎三个表中检索数据。

例如......

for item in queryResult:
   a=table1.objects.get(id=item[0])
   b=table2.objects.get(id=item[1])
   c=table2.objects.get(id=item[2])
   z=a.result
   x=a.result1
   v=c.result

   ####based on some condition check the data is stored into a list as dictionary.

   recentDocsList.append({'PurchaseType':item[0],
                           'CaseName':z,
                           'DocketNumber':x, 
                           'CourtID':item[2],                             
                           'PacerCmecf':v,                              
                           'DID':item[3]})

完成循环后,这个rec​​entDocsList返回... 但整个过程就是让我的页面渲染很慢。任何人都有任何方法可以解决这个问题。

PS:整个事情都在一个while循环中。一次只检索到50个结果。如果检索到的结果小于50或者,则控件来自while循环 recentDocsList 长度等于10.

提前致谢。

1 个答案:

答案 0 :(得分:0)

不要太早优化 - 这可能会造成混淆和混淆。

即使使用SQLite3,您也应该能够在不对数据库征税的情况下提取50个链式查询集(提升到性能更高的数据库,如PostgreSQL会进一步提高这一点)。这表明您的问题在其他地方,调试此尝试在

中调用您的模型/查询/视图
$ ./manage.py debugshell

这将打印出您的SQL查询,以便您可以看到实际调用的内容。更好的方法是安装django-debug-toolbar,因为这会告诉你SQL /渲染减速的位置。

但是!除非你有充分的理由这样做,否则不要写自定义SQL 在django中执行 - ORM几乎可以处理所有事情。自定义SQL的一些危险包括可怕的性能 - 正如您可能正在经历的那样。

此外 - 性能敏感地方的while循环(如页面渲染)听起来像是等待发生的灾难 - 你确定不能以更安全的方式重写它吗?

如果没有看到更多代码,很难提供帮助 - 您的查询设置有多大?它们有效吗?你的桌子有索引吗? (Django会提供这些,如果你允许的话,但听起来你做的不同了。)