sql >> Databasteknik >  >> RDS >> Mysql

Om att uppdatera objekt i sqlalchemy-session

Sessioner är utformade för att fungera så här . Attributen för objektet i Session B KOMMER att behålla vad det hade när det först frågades i Session B. Dessutom kommer SQLAlchemy inte att automatiskt försöka uppdatera objekt i andra sessioner när de ändras, och jag tror inte heller att det skulle vara klokt att försöka skapa något så här.

Du bör aktivt tänka på livslängden för varje session som en enda transaktion i databasen. Hur och när sessioner behöver hantera det faktum att deras objekt kan vara inaktuella är inte ett tekniskt problem som kan lösas med en algoritm som är inbyggd i SQLAlchemy (eller något tillägg för SQLAlchemy):det är ett "affärsproblem" vars lösning du måste bestämma och koda själv. Det "rätta" svaret kan vara att säga att detta inte är ett problem:logiken som uppstår med session B kan vara giltig om den använde data vid den tidpunkt då session B startade. Ditt "problem" kanske inte är ett problem. Dokumenten har faktiskt en hela avsnittet om när man ska använda sessioner , men det ger ett ganska dystert svar om du hoppas på en lösning som passar alla...

Som sagt, det finns några saker du kan göra för att ändra hur situationen fungerar:

Först kan du minska hur länge din session är öppen. Session B frågar objektet, och senare gör du något med det objektet (i samma session) som du vill att attributen ska vara uppdaterade. En lösning är att göra denna andra operation i en separat session.

En annan är att använda expire/refresh-metoderna, som dokumenten visa ...

# immediately re-load attributes on obj1, obj2
session.refresh(obj1)
session.refresh(obj2)

# expire objects obj1, obj2, attributes will be reloaded
# on the next access:
session.expire(obj1)
session.expire(obj2)

Du kan använda session.refresh() för att omedelbart få en uppdaterad version av objektet, även om sessionen redan frågade objektet tidigare.



  1. Hur ringer man upp MySQL lagrad procedur från Rails?

  2. Lista alla funktioner i Oracle Database

  3. Hur fungerar MySQL-vyer?

  4. MySQL:Hitta rader som inte deltar i ett förhållande