I am using SQlAlchemy in my web project. What should I use - scoped_session(sessionmaker())
or plain sessionmaker()
- and why? Or should I use something else?
## 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()
I create a session = Session()
object for each request and I close it. Am I doing the right thing or is there a better way to do it?
Session. rollback() rolls back the current transaction.
the scoped_session() function is provided which produces a thread-managed registry of Session objects. It is commonly used in web applications so that a single global variable can be used to safely represent transactional sessions with sets of objects, localized to a single thread.
Python Flask and SQLAlchemy ORM In order to interact with the database, we need to obtain its handle. A session object is the handle to database. Session class is defined using sessionmaker() – a configurable session factory method which is bound to the engine object created earlier. from sqlalchemy.
Return the first result of this Query or None if the result doesn't contain any row. first() applies a limit of one within the generated SQL, so that only one primary entity row is generated on the server side (note this may consist of multiple result rows if join-loaded collections are present).
Reading the documentation is recommended:
the
scoped_session()
function is provided which produces a thread-managed registry ofSession
objects. It is commonly used in web applications so that a single global variable can be used to safely represent transactional sessions with sets of objects, localized to a single thread.
In short, use scoped_session()
for thread safety.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With