Python 为什么查询返回相同的对象并对数据库执行两次查询

Python 为什么查询返回相同的对象并对数据库执行两次查询,python,sqlalchemy,Python,Sqlalchemy,假设我有一个类用户 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)是相同的-

假设我有一个类用户

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)和偶数散列(a)==hash(b)。对于相同的对象,也会发出两次请求。
这种行为总是有保证的吗?

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

类查询管理器:
定义初始化(自):
self.alreadyQuery={}
def queryById(自身,id):
如果self.alreadyQuery中有id:
返回self.alreadyQuery[id]
user=session.query(user).first(user.id=id)
self.alreadyQuery[id]=用户
返回用户

Query.first()
不接受筛选条件参数,并且
first(User.id=id)
是一个语法错误。SQLA查询API通过
Query.get()
提供了这种开箱即用的方法。