首页 > 解决方案 > 为什么查询返回相同的对象并对数据库执行两次查询

问题描述

假设我有一个类用户。

class User:
  def __ init__(self):
      pass

  def other_method(self):
      some_code

我需要查询数据库:

id = 10 # let be (conditionally)
a = session.query(User).first(User.id=id)
b = session.query(User).first(User.id=id)

在这种情况下,返回的对象(a 和 b)是相同的 - id(a) == id(b) 甚至 hash(a) == hash(b)。对相同的对象也提出了两次请求。这种行为是否总是得到保证?

标签: pythonsqlalchemy

解决方案


您两次调用查询方法,因此它只会执行两个不同的查询。为避免此问题,您可以创建自己的经理。

class QueryManager:
    def __init__(self):
        self.alreadyQuery = {}

    def queryById(self, id):
        if id in self.alreadyQuery:
            return self.alreadyQuery[id]
        user = session.query(User).first(User.id=id)
        self.alreadyQuery[id] = user
        return user

推荐阅读