gpt4 book ai didi

python - SQLAlchemy 和 Falcon - session 初始化

转载 作者:太空狗 更新时间:2023-10-29 17:43:04 29 4
gpt4 key购买 nike

我想知道在何处创建用于 falcon 的作用域 session 的最佳位置。

通过阅读 flask-sqlalchemy 代码,它以一种循环的方式做了如下事情:

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

try:
from greenlet import get_current as get_ident
except ImportError:
try:
from thread import get_ident
except ImportError:
from _thread import get_ident

connection_uri = 'postgresql://postgres:@localhost:5432/db'
engine = create_engine(connection_uri)
session_factory = sessionmaker(bind=engine)
session_cls = scoped_session(session_factory, scopefunc=get_ident)
session = session_cls()

这对猎鹰有用吗?使用 gunicorn 时,get_ident 函数会“做正确的事”吗?

最佳答案

您可以使用 middleware

例子。

  1. 创建引擎、session_factory 和 scoped_session 对象。

    from sqlalchemy import create_engine
    from sqlalchemy.orm import scoped_session
    from sqlalchemy.orm import sessionmaker

    import settings


    engine = create_engine(
    '{engine}://{username}:{password}@{host}:{port}/{db_name}'.format(
    **settings.POSTGRESQL
    )
    )

    session_factory = sessionmaker(bind=engine)
    Session = scoped_session(session_factory)
  2. 创建中间件。

    class SQLAlchemySessionManager:
    """
    Create a scoped session for every request and close it when the request
    ends.
    """

    def __init__(self, Session):
    self.Session = Session

    def process_resource(self, req, resp, resource, params):
    resource.session = self.Session()

    def process_response(self, req, resp, resource, req_succeeded):
    if hasattr(resource, 'session'):
    Session.remove()
  3. 注册中间件。

    import falcon


    app = falcon.API(middleware=[
    SQLAlchemySessionManager(Session),
    ])
  4. session 在每个请求中都是可访问的。

    import falcon


    class MyAPI:

    def on_get(self, req, resp):
    # You can access self.session here
    # self.session.add(foo)
    # self.session.commit()

关于python - SQLAlchemy 和 Falcon - session 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38863057/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com