我正在公开一个API,该API允许用户执行各种CRUD操作。
我的SQLAlchemy数据模型的基础类派生自单个声明性基础,其中包括一个“ insert_uuid”字段(顾名思义)应注册触发每个插入操作的用户的UUID。
在每个API调用中,我想设置一个“临时”会话/上下文/任何可用于设置默认值的变量。但是,不必依赖于Flask的request模块,因为该声明性基础位于“数据包”中,该数据包完全不需要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核心的某些功能的最佳方法是什么?
谢谢!