Могу ли я присоединиться к объекту Python (т.е. списку) в запросе с помощью SQLAlchemy? - PullRequest
0 голосов
/ 17 июня 2020

Предполагая, что у меня есть таблица Postgres -DB, которая выглядит так (с большим количеством строк):

|------|-------|
|col1  |col 2  |
|------|-------|
|a1    |10     |
|a2    |55     |
|a3    |24     |
|------|-------|

И список в Python с кортежами, выглядящими следующим образом:

|------|-------|
|a1    |1      |
|a3    |2      |
|------|-------|

Во время выполнения я теперь хочу (внутреннее) объединить таблицу со списком без необходимости сохранять список как объект БД.

Что действительно работает, так это фильтрация с использованием списка и SQLAlchemys .in_ оператор.

Однако, когда я пытаюсь db.query(Table).join(list), я получаю эту ошибку:

sqlalchemy.ex c .NoInspectionAvailable: для объекта типа * отсутствует система проверки 1016 *

Конечно, обходным путем было бы сначала получить все элементы из базы данных с помощью оператора фильтра, а затем использовать python для соединения ... но похоже, что должен быть

1 Ответ

1 голос
/ 17 июня 2020

Если я правильно понял, и вы хотите получить только строки, где col1 == tuple[0], вы можете использовать операторы sqlalchemy filter и in_:

tuples_list = [('a1', 1), ('a3', 2)]

search_dict = dict(tuples_list)  # Convert to dict 

res = db.query(Table).filter(Table.col1.in_(search_dict.keys())).all()

for instance in res:
    instance.col2 = instance.col2 + search_dict[instance.col1]

Там также подробный пример без использования ORM здесь: SQLAlchemy IN clause

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