【问题标题】:How to transform a queryset instance to dictionary Django如何将查询集实例转换为字典 Django
【发布时间】:2021-08-06 12:33:06
【问题描述】:

为了优化我的功能,我想将查询集转换为字典并将其存储在缓存中。这是我的实例和输出:

 nodes = Node.objects.select_related().all()

<QuerySet [<Node: Node : No name of ( Network IDF )>, <Node: Node : No name of ( Network IDF 
)>, <Node: Node : No name of ( Network IDF )>, <Node: Node : No name of ( Network IDF )>, 
<Node: Node : No name of ( Network IDF )>, <Node: Node : No name of ( Network IDF )>, <Node: 
Node : No name of ( Network IDF )>, <Node: Node : No name of ( Network IDF )>, <Node: Node : 
No name of ( Network IDF )>, <Node: Node : No name of ( Network IDF )>, <Node: Node : No 
name of ( Network IDF )>, <Node: Node : No name of ( Network IDF )>, <Node: Node : No name 
of ( Network IDF )>, <Node: Node : No name of ( Network IDF )>, <Node: Node : No name of ( 
Network IDF )>, <Node: Node : No name of ( Network IDF )>, <Node: Node : No name of ( 
Network IDF )>, <Node: Node : No name of ( Network IDF )>, <Node: Node : No name of ( 
Network IDF )>, <Node: Node : No name of ( Network IDF )>, '...(remaining elements 
truncated)...']>

例如:

nodes.get(node_id=7223004840) is <Node: Node : No name of ( Network IDF )>

我希望我的字典包含我的每个 node_id 以及关联的实例。例如:

{7223004840 : <Node: Node : No name of ( Network IDF ), etc}

我不想使用 get :

 {7223004840 : nodes.get(node_id=7223004840), etc}

因为它会多次访问数据库。有关信息,我有超过 77 000 行和 20 列。

【问题讨论】:

    标签: django postgresql django-models django-views django-queryset


    【解决方案1】:

    试试这个:

    nodes = Node.objects.select_related().all()
    nodes_list = [
        {item.id: item} for item in nodes
    ]
    

    它只会命中一次 DB。

    【讨论】:

    • 这个解决方案确实有效。但我认为,存在没有循环的解决方案。非常感谢
    猜你喜欢
    • 2020-04-01
    • 2019-01-26
    • 2023-01-31
    • 2019-09-19
    • 2019-11-01
    • 1970-01-01
    • 2021-08-21
    • 2014-12-21
    • 2019-09-13
    相关资源
    最近更新 更多