Редактировать 1: до сих пор я придумал следующую SQLAlchemy в тестировании, но мне все еще нужно выяснить, как добавить к ней окончательный SELECT, который помещает данные в форму, которую я хочу. Любые идеи?
query1 = db.session.query(literal_column("'first_name'").label("matches"), models.User.id).filter(models.User.first_name == 'Joe')
query2 = db.session.query(literal_column("'last_name'").label("matches"), models.User.id).filter(models.User.last_name == 'Su')
union = db.union_all(query1, query2)
results = db.session.query(db.alias(union, name='users')).all()
Пожалуйста, простите меня, поскольку я пытаюсь объяснить это как можно лучше. Я ничего не пробовал, если кто спросит. Я не нашел информации, в которой бы прямо указывалось, можно ли это сделать и как это сделать.
Основной вопрос заключается в том, как я могу взять несколько меньших запросов в таблицу и объединить их, чтобы в результирующих данных был столбец (с данными, которые он содержит, скорее всего, массив), который представляет собой список запросов, которые вернули тот же объект.
Например, если у меня есть таблица Users со следующими данными
id | first_name | last_name | age
1 |Joe | Shmoe | 39
2 |Marry | Su | 63
3 |Frank | Su | 39
и у меня есть следующие запросы (используя SQL для простоты, но это должно закончиться использованием кода стиля PostgreSQL ORM)
Select * from Users where first_name = "Joe";
- resulting Ids: 1
Select * from Users where last_name = "Su";
- resultings Ids: 2,3
Select * from Users where age ="39";
- resulting Ids: 1,3
Объединенный запрос должен заканчиваться
id | first_name | last_name | age | matches
1 | Joe | Shmoe | 39 | ['first_name', 'age']
2 | Marry | Su | 63 | ['last_name']
3 | Frank | Su | 39 | ['last_name', 'age']
Если это возможно, как это сделать?
Также на заметку. Я хотел бы иметь возможность конкретно маркировать то, что идет на спички. Например, я мог бы пометить первый запрос как 'first_name', как в моем примере, или сделать его 'firstName' или 'Dude', или как угодно.