gpt4 book ai didi

sql - Django 原始 SQL 查询 - 循环结果,它为每次迭代执行查询

转载 作者:行者123 更新时间:2023-12-04 23:12:16 26 4
gpt4 key购买 nike

在注意到 Django 的一些内置查询效率低下之后,一直在编写一些原始 SQL 查询。我正在尝试遍历 QuerySet 结果并将它们分组(我知道 regroup 模板标签,这对我不起作用 - 我需要能够独立访问单独的组)。这是我的代码:

m = Media.objects.raw('SELECT * FROM table') # query simplified for sake of example

media_items = {'aim-icons' : [], 'banners' : [], 'hi-res-photos' : [], 'photos' : [], 'print-ads' : [], 'videos' : [], 'wallpapers' : [] }

for item in m:
media_items[item.type_slug].append(item)

这给了我想要的东西(例如,我可以像 media_items['wallpapers'] 一样访问的列表)但是它会为每次迭代运行数据库查询以获取 type_slug字段。我尝试在循环之前添加 m = list(m),但没有效果。

有人可以帮我吗?这看起来应该很简单。

谢谢,马特

最佳答案

编辑:

问题在这里分解为 Django 的 raw() 方法是如何工作的。它返回模型实例(它具有您正在访问的属性,从而导致额外的查询)。

此处适当的工具是 connection.cursor()cursor.execute()cursor.fetchall()。这是文档中的示例:

def my_custom_sql():    from django.db import connection, transaction    cursor = connection.cursor()    # Data modifying operation - commit required    cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])    transaction.commit_unless_managed()    # Data retrieval operation - no commit required    cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])    row = cursor.fetchone()    return row

http://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly

关于sql - Django 原始 SQL 查询 - 循环结果,它为每次迭代执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6037312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com