Являются ли объекты запроса в SqlAlchemy неизменными? - PullRequest
0 голосов
/ 16 января 2020

Допустим, я получил запрос, подобный этому ...

baseQuery = MyDbObj.query.filter_by(someProp='foo')

Если на более позднем этапе я расширю этот запрос чем-то другим (скажем, другим фильтром) ...

derivedQuery = baseQuery.filter_by(anotherProp='bar')

приведет ли это к внутреннему изменению исходного запроса или создан новый экземпляр запроса?

Справочная информация: Мой вариант использования состоит в том, что я получил несколько вариантов, которые отличаются только одним фильтром. Прямо сейчас есть тонна вставленного в копию кода запроса (не моя вина, я унаследовал эту кодовую базу), которую я очищаю. Для случаев, когда в конечном итоге выполняется только один запрос, мне все равно, будет ли изменен исходный запрос. Однако у меня также есть случаи, когда выполняются два запроса, поэтому здесь важно, чтобы я мог расширить два запроса из базового запроса, не мешая друг другу.

Хотя, возможно, здесь можно решить эту фильтрацию в самом python и не делать два запроса к БД, во-первых (я оставлю это как второй вариант).

1 Ответ

1 голос
/ 16 января 2020

SQLAlchemy создает копию при фильтрации. Поэтому, когда вы делаете

derivedQuery = baseQuery.filter_by(anotherProp='bar')

, derivedQuery является копией baseQuery с примененным фильтром. Подробнее см. документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...