gpt4 book ai didi

python - 在给定项目结构中的 flask 应用程序中管理 sqlalchemy session 的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-05 09:12:59 26 4
gpt4 key购买 nike

<分区>

您好,抱歉,这是一个非常开放的问题,更像是编码建议。寻找将 sqlalchemy session 用于 flask 项目的最佳实践。找不到可以回答我的问题的博客,因此在这里提问。

我有一个类似于以下的 flask 应用程序的项目结构:

---services
--- service_1.py
--- service_2.py
---models.py
---adapter.py
---app.py

所有业务逻辑都驻留在服务中。服务中的方法调用适配器中的方法以与 DB 进行任何交互。

适配器是数据访问层,所有 sql 查询都在其中发生。 Adaper 代码是这样的:

from .models import *
class DBAdapter(object):
def __init__(self, session):
self._db_session = get_session() # get a sql alchemy session

def create_customer(**kwargs):
c = Customer(**kwargs)
self._db_session.add(c)
return c
.
.
.
def commit(self):
self.session.commit()

def close_session(self):
self.session.close()

服务看起来像这样:

from ..adapter import DBAdapter

class Service1(object):
def __init__(self, a):
self.a = a
self._db_adapter = DBAdapter()

def do_something(self, x, y):
if x != 10:
self.create_something(x)
self._db_adapter.commit()
self._db_adapter.close_session()
return

self._db_adapter.create_customer(y)
self._db_adapter.create_something_else(x)
self._db_adapter.commit()
self._db_adapter.close_session()
return

现在的问题是如何在每个返回语句之前不重复 self._db_adapter.close_session() 的情况下关闭 session 。它需要在两个地方关闭一次,然后返回内部 if 条件,然后在最后。

我应该以不同的方式创建我的数据访问层 DBAdapter 吗?

我想保持我的 session 干净并仅在服务初始化时创建它,所以我不能像这样将它放在 flask 中的 g 对象中:

Flask and sqlalchemy: handling sessions

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