J'ai une configuration de page Web de pyramide. L'un des points de vue fait quelque chose comme ceci: -Requêtes SQLAlchemy - quand sont-elles exécutées?
sql_list = do_a_query()
handle_a_post_request(request)
return dict(sql_list=sql_list)
def do_a_query():
request.db.query(WhatIAmLookingFor)
Le (Mako, mais je pense que c'est hors de propos) modèle gère l'affichage puis ma page Web sur la base des données sql_list.
Dans la fonction handle_a_post_request
, je modifie la session (et exécute commit()) en fonction de la demande de publication. Ces modifications apparaissent dans la page résultante, ce qui me suggère que la requête elle-même "s'exécute" ou s'exécute quand elle est appelée dans mon modèle. Depuis que j'utilise mako l'appel est fait en utilisant: -
% for row in sql_list:
<tr>
<td> ${row[0]} </td>
<td> ${row[1]} </td>
<td> ${row[2]} </td>
</tr>
Ma conclusion est-elle correcte? Quand exactement une requête sqlalchemy est-elle «actualisée», de sorte que les modifications apportées à la session après ce point n'apparaissent plus dans le «résultat» de la requête? Ou est-ce que ma compréhension est fondamentalement erronée quelque part? Ce qui me préoccupe, c'est qu'à l'avenir, une modification de la fonction do_a_query()
(par exemple, l'itération de ses résultats pour un pré-traitement avant l'affichage) changera le comportement de ma page Web. Bien sûr, la «bonne» réponse est simplement de déplacer handle_a_post_request()
plus tôt, mais j'aimerais bien comprendre ce qui se passe en premier.
Je pense que vous pourriez être en train de courir dans '' autoflush'', jetez un oeil à ceci: http://stackoverflow.com/questions/4201455/sqlalchemy-whats-the-difference-between-flush-and-commit –
Non, certainement pas cet ensemble. –