python - 为什么查询返回相同的对象并对数据库执行两次查询
问题描述
假设我有一个类用户。
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)。对相同的对象也提出了两次请求。这种行为是否总是得到保证?
解决方案
您两次调用查询方法,因此它只会执行两个不同的查询。为避免此问题,您可以创建自己的经理。
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
推荐阅读
- javascript - 我正在尝试使用一些带有 codeceptjs 的本机 puppeteer 来使用其 ID 查找元素的所有方面
- c - 如何将 32 位打包成 4x8 位?
- c++ - 从源代码构建 UE4 - Mathcalls 语法错误
- sql - plpgsql 函数会产生巨大的性能开销
- php - 如何在 magento 2 phpunit 测试中进行依赖注入
- php - 未定义索引:PHP 7.2.1 中的 file_upload
- sql-server - 如何在非常大的表中获取最大日期的列名
- swift - 我希望我已经登录的用户拥有我的 ViewController3 作为 rootViewController,而那些没有登录的用户拥有 ViewController2
- php - 使用保存的字符串作为对象内容的目标
- android - 如何从 MediaCodec 获取解码格式?