gpt4 book ai didi

python - Flask-sqlalchemy 临时 session /上下文变量

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

我公开了一个允许用户执行各种 CRUD 操作的 API。

我的 SQLAlchemy 数据模型的底层类派生自单个声明性基础,其中包括一个“insert_uuid”字段(顾名思义)应该注册触发每次插入的用户的 UUID。

在每个 API 调用中,我想设置一个“临时” session /上下文/任何我可以用来设置默认值的变量。但是,不必依赖 Flask 的请求模块,因为这个声明性基础驻留在一个“数据包”中,无论如何都不需要 Flask。

即像这样的东西:

db.session.set_variable(user-uuid='aaaa-bbbb-etc')
db.session.add(object1)
db.session.add(object2)
db.session.add(object3)
db.session.remove_variable(user-uuid)

我看过在 SQLAlchemy 引擎上设置执行选项。然而,这是一个不可变的字典,在创建引擎时初始化。

def get_user_uuid(context):
return context.engine.get_execution_options().get('user_uuid', None)

class BaseTableDefinition(object):
insert_uuid = Column("insert_uuid", UUIDType(), default=get_user_uuid)
....

BaseTable = declarative_base(cls=BaseTableDefinition)

然后,在初始化引擎时:

engine = create_engine(self._cn_string, echo=False, execution_options={'user_uuid': 'aaaa-bbbb-etc'})

在“静态”后端,每个引擎设置一个用户,这可能有效,但它不适用于我的 API 用例。

在 flask-sqlalchemy 上下文中实现上述目标的最佳方法是什么,最好依赖底层 SQLAlchemy 核心的某些功能?

谢谢!

最佳答案

SQLAlchemy session 有一个 info属性,一个用户可修改的字典,所以像这样的东西会起作用:

db.session.info['user-uuid'] = 'aaaa-bbbb-etc'
db.session.add(object1)
db.session.add(object2)
db.session.add(object3)
db.session.info.pop('user-uuid')

Sessionsessionmaker接受 info 关键字参数以在创建时设置字典的内容。要在 Flask-SQLAlchemy 中创建 session 时动态设置值,您可能需要子类化 SQLALchemy并覆盖/扩展 create_sessioncreate_scoped_session .

关于python - Flask-sqlalchemy 临时 session /上下文变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56441370/

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