67 votes

scoped_session(sessionmaker()) ou plain sessionmaker() dans sqlalchemy ?

J'utilise SQlAlchemy dans mon projet Web. Que dois-je utiliser - scoped_session(sessionmaker()) ou pur sessionmaker() - et pourquoi ? Ou dois-je utiliser autre chose ?

 ## model.py
from sqlalchemy import *
from sqlalchemy.orm import *

engine = create_engine('mysql://dbUser:dbPassword@dbServer:dbPort/dbName',
pool_recycle=3600, echo=False)
metadata = MetaData(engine)
Session = scoped_session(sessionmaker())
Session.configure(bind=engine)
user = Table('user', metadata, autoload=True)

class User(object):
pass

usermapper = mapper(User, user)

## some other python file called abc.py
from models import *

def getalluser():
   session = Session()  
   session.query(User).all()
   session.flush()
   session.close()

## onemore file defg.py
from models import *

def updateuser():
   session = Session()  
   session.query(User).filter(User.user_id == '4').update({User.user_lname: 'villkoo'})
   session.commit()
   session.flush()
   session.close()

Je crée un objet session = Session() pour chaque requête et je le ferme. Est-ce que je fais la bonne chose ou y a-t-il une meilleure façon de le faire?

12voto

Abdul Kader Points 3590

Scoped_session à chaque méthode vous donnera un thread de session locale que vous ne pouvez pas obtenir au préalable (comme au niveau du module). Il n'est pas nécessaire d'ouvrir une nouvelle session dans chaque méthode, Vous pouvez utiliser une session globale, Créer une session uniquement lorsque le la session globale n'est pas disponible. c'est-à-dire que vous pouvez écrire une méthode qui renvoie une session et l'ajouter au fichier init .py à l'intérieur de votre package.

4voto

nikhil24 Points 6

Pour info, lors de l'utilisation de flask-sqlalchemy, l'objet de session fourni est par défaut un objet de session étendu.

entrez la description de l'image ici

http://flask-sqlalchemy.pocoo.org/2.3/quickstart/#road-to-enlightenment

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X