2011-11-18 1 views
0

J'ai une tonne de code qui édite une base de données, mais ce que je veux faire est de charger toutes les données dont j'ai besoin pour modifier ou ajouter à une session, retourner une page Web et l'utilisateur a examiné les données, puis valider dans la base de données. Quelque chose comme ceci:Base de données Python Session (meta.Session)

def index(self): 
    empsTbl = meta.Session.query(model.Person).all(); 
    newEmp = model.Person() 
    newEmp.userid = row[0].strip() 
    meta.Session.add(newEmp) 
    return render("/update.html") 

def commitSession(self): 
    meta.Session.commit() 

Si je tente d'appuyer sur un bouton de page Web pour appeler le commitSession def, la session semble être vide. J'ai essayé quelques trucs sur le modèle tels que:

Session.configure(autoflush=False, autocommit = False, bind=engine) 

et j'ai également changé le basecontroller. J'ai enlevé le code:

meta.Session.remove() 

Afin qu'il ne supprime pas la session après chaque appel.

J'ai aussi essayé d'utiliser fusion, pour voir si cela stockerait la session lors de la session de base de données persistante:

meta.Session.merge(newEmp) 

Mais je ne peux pas encore semblent le faire fonctionner.

Edit:

Si quelqu'un pouvait donner des conseils sur la meilleure façon de décaper une session Python qui serait très utile

+0

Il est préférable de limiter vos transactions à des opérations très spécifiques qui ne prennent pas beaucoup de temps. Veuillez modifier votre question pour décrire la portée logique et programmatique de votre transaction, c'est-à-dire ce qui se produit entre le moment où vous obtenez la session et celui où vous vous engagez. – wberry

Répondre

1

J'espère que ce n'est pas, mais il semble que vous pas encore comprendre les cycles de vie de votre site Web. dans votre cas, vous avez 2 cycles de vie, car vous avez 2 actions. 2 scénarios de requête/réponse. vous devez comprendre, que (surtout) tout ce que vous faites dans une action, il reste là. votre session de base de données de l'action "index" est une autre comme celle de "commitSession", à cause de cela, cette session dans "commitSession" est vide. Pourquoi? Parce que vous venez de valider une session nouvellement créée. Ce que vous avez à faire est de trouver un moyen de travailler pour vous et votre cause pour transporter l'information de l'action "index" à l'action "commitSession". la manière la plus utilisée est de sérialiser les informations, de les mettre dans votre session web, de les désérialiser dans l'action "commitSession", de les écrire dans la base de données et d'invalider vos informations dans la session web. ou vous mettez toutes les informations hors de "index" dans certains champs cachés, et les publiez à nouveau contre "commitSession".

+0

C'est ce que j'avais besoin de savoir. Je pensais que je devrais décaper la session mais je ne savais pas s'il était possible de maintenir la session existante comme elle l'était tout au long de la transaction. – JackalopeZero

Questions connexes