scoped_session(sessionmaker()) or plain sessionmaker() in sqlalchemy?

Reading the documentation is recommended:

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.

In short, use scoped_session() for thread safety.


Scoped_session at every method will give you a thread of local session which you cannot obtain beforehand (like at the module level).It's not needed to open a new session in every method, You can use a global session , Create a session only when the global session is not available. i.e you can write a method which returns a session and add it to the init.py inside your package.


FYI, when using flask-sqlalchemy, the session object provided is by default a scoped session object.

enter image description here

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