-1

我在 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 或 recentDocsList长度等于 10,则控件退出 while 循环。

提前致谢。

4

1 回答 1

0

不要过早优化——这会造成混淆和混乱。

即使使用 SQLite3,您也应该能够拉出 50 个链式查询集而不会对数据库征税(升级到像 PostgreSQL 这样的更高性能的数据库会进一步改善这一点)。这表明您的问题在其他地方,要调试此尝试调用您的模型/查询/视图

$ ./manage.py debugshell

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

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

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

如果没有看到更多代码,很难提供帮助 - 您的查询集有多大?他们有效率吗?你的表有索引吗?(如果您允许,Django 将提供这些,但听起来您正在做一些不同的事情)。

于 2013-02-01T10:03:22.793 回答