J'ai deux tables sql. Table 1 (id, nom) et Table 2 avec (id, nom, 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()
Si le résultat de la requête sql est
67, 'some name', 1, 'some name in table 2', 67
Ensuite, tout est OK et j'ai [(<Table1>, <Table2>)]
pour table1_table2_tuple_list
Mais Si le résultat de la requête sql est : (également tous les autres codes sont pour ce résultat)
67, 'some name', Null, Null, Null
Alors, au lieu de recevoir [(<Table1>, None)]
Je reçois [(None, None)]
Si je change un peu mon code :
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()
Alors je reçois :
[<Table1>, <Table2>, 1]
Mais dans ce cas, je ne suis même pas sûr que ce soit correct car je fais correspondre deux colonnes du SQL au modèle Table2 qui a trois colonnes. Je ne sais pas du tout pourquoi cela fonctionne, mais tout semble en place. Ce n'est toujours pas ce que je veux, car je ne veux pas revenir à cette requête et spécifier encore et encore de nouvelles colonnes s'il y en a pour Table2.
Ce dont j'ai besoin, c'est d'un moyen de sélectionner deux tables avec du sql pur, et de faire correspondre le résultat à mes modèles. Je veux également obtenir le résultat même dans les cas où l'une des tables n'a pas de valeur dans ses colonnes de résultat. J'espère avoir été clair. Mon objectif est de recevoir
[(<Table1>, None)]
lorsque la requête porte sur toutes les colonnes ( SELECT t1.*, t2.*
) et il y a LEFT JOIN avec null ajouté.