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

前端 未结 4 727
南笙
南笙 2021-01-31 08:12

I am using SQlAlchemy in my web project. What should I use - scoped_session(sessionmaker()) or plain sessionmaker() - and why? Or should I use somethin

相关标签:
4条回答
  • 2021-01-31 08:26

    I am looking into this myself, but I am not an expert.

    My three points are:

    1. SQLAlchemy docs provide a proposed approach using scoped_session, per Mr. Kluev's comment above, at this link: http://docs.sqlalchemy.org/en/rel_0_9/orm/session.html#using-thread-local-scope-with-web-applications.
    2. At that web location, the SQLAlchemy docs also say that it is "...strongly recommended that the integration tools provided with the web framework itself be used, if available, instead of scoped_session."
    3. Flask-SQLAlchemy, for example, appears to claim that it takes care of this: http://pythonhosted.org/Flask-SQLAlchemy/quickstart.html#a-minimal-application
    0 讨论(0)
  • 2021-01-31 08:39

    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.

    0 讨论(0)
  • 2021-01-31 08:42

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

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

    0 讨论(0)
  • 2021-01-31 08:52

    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.

    0 讨论(0)
提交回复
热议问题