У меня есть две таблицы sql.
Таблица 1 (идентификатор, имя) и Таблица 2 с (идентификатор, имя, table1_id)
sql = text('SELECT t1.*, t2.* FROM table1 t1 '
'LEFT JOIN table2 t2 ON t1.id=t2.table1_id ')
query = db.session.query(Table1, Table2).from_statement(sql).params()
table1_table2_tuple_list = query.all()
Если результат запроса sql равен
67, 'some name', 1, 'some name in table 2', 67
Тогда все в порядке, и у меня есть [(<Table1>, <Table2>)]
для table1_table2_tuple_list
Но
Если результат запроса sql: (также весь другой код для этого результата)
67, 'some name', Null, Null, Null
Тогда вместо получения [(<Table1>, None)]
Я получаю [(None, None)]
Если я немного изменю свой код:
sql = text('SELECT t1.*, t2.id, t2.name,t1.id FROM table1 t1 '
'LEFT JOIN table2 t2 ON t1.id=t2.table1_id ')
query = db.session.query(Table1, Table2, Table1.id).from_statement(sql).params()
table1_table2_tuple_list = query.all()
Тогда я получаю:
[<Table1>, <Table2>, 1]
Но в этом случае я даже не уверен, правильно ли это, потому что я сопоставляю два столбца из sql с моделью Table2, которая имеет три столбца. Совершенно не уверен, почему это работает, но все кажется на месте. Тем не менее, это не то, что я хочу, потому что я не хочу возвращаться к этому запросу и указывать снова и снова новые столбцы, если таковые имеются для Table2
Мне нужен способ выбрать одну из двух таблиц с чистым sql и сопоставить результат с моими моделями. Также я хочу получить результат даже в тех случаях, когда одна из таблиц не имеет значения в столбцах результатов. Надеюсь, мне ясно. Моя цель - получить
[(<Table1>, None)]
, когда запрос для всех столбцов (SELECT t1.*, t2.*
), и есть LEFT JOIN с добавленным нулем.