为什么查询返回相同的对象并对数据库实施两次查询

时间:2019-06-04 14:20:27

标签: python sqlalchemy

假设我有一个User类。

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)。对于相同的对象,还会发出两次请求。 这种行为总是得到保证吗?

1 个答案:

答案 0 :(得分:-1)

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

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