一个数据库

该引擎使您可以使用连接池.默认情况下,它将在请求之间保持连接.基本用法(没有诸如scoped_session或sessionmaker之类的花哨的东西)是这样的:

engine = create_engine(...)

@app.route(...)

def foo():

session = Session(bind=engine)

try:

session.query(...)

session.commit()

finally:

session.close()

return ""

最重要的是,您可以添加scoped_session和sessionmaker:

engine = create_engine(...)

Session = sessionmaker(bind=engine)

session = scoped_session(Session, scopefunc=...)

@app.route(...)

def foo():

try:

session.query(...)

session.commit()

finally:

session.close()

return ""

flask-sqlalchemy通过提供以下所有功能使您的生活更轻松:

db = SQLAlchemy(app)

@app.route(...)

def foo():

db.session.query(...)

db.session.commit()

return ""

多个数据库

您可以轻松地将此概念扩展到多个数据库:

engine1 = create_engine(...)

engine2 = create_engine(...)

@app.route(...)

def foo():

session = Session(bind=choose_engine_for_user())

try:

session.query(...)

session.commit()

finally:

session.close()

return ""

当您添加scoped_session和sessionmaker时:

engine1 = create_engine(...)

engine2 = create_engine(...)

Session1 = sessionmaker(bind=engine1)

Session2 = sessionmaker(bind=engine2)

session1 = scoped_session(Session1, scopefunc=...)

session2 = scoped_session(Session2, scopefunc=...)

@app.route(...)

def foo():

session = choose_session_for_user()

try:

session.query(...)

session.commit()

finally:

session.close()

return ""

当您有许多数据库时,这会有些烦人,在这种情况下,您可能应该编写一个注册表类来跟踪所有引擎和会话:

class SessionRegistry(object):

_registry = {}

def get(self, url, **kwargs):

if url not in self._registry:

engine = create_engine(url, **kwargs)

Session = session_maker(bind=engine)

session = scoped_session(Session, scopefunc=...)

self._registry[url] = session

return self._registry[url]

registry = SessionRegistry()

@app.route(...)

def foo():

session = registry.get(...)

try:

session.query(...)

session.commit()

finally:

session.close()

return ""

您需要在其之上添加某种LRU,以便不会无限创建引擎.

flask-sqlalchemy支持有限形式的多个数据库,其中每个模型都连接到不同的数据库.如果您适用,那么文档为here.

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐