Почему запрос возвращает одни и те же объекты и дважды выполняет запрос к базе данных - PullRequest
0 голосов
/ 04 июня 2019

Предположим, у меня есть класс 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 голосов
/ 04 июня 2019

Вы вызываете метод запроса дважды, чтобы он просто выполнял два разных запроса. Чтобы избежать этой проблемы, вы можете создать свой собственный менеджер.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...