Я предоставляю API, который позволяет пользователям выполнять различные операции CRUD.
Базовые классы моей модели данных SQLAlchemy получены из единой декларативной базы, которая включает в себя поле "insert_uuid", которое (какимя подразумевает) должен зарегистрировать UUID пользователя, запускающего каждую вставку.
В каждом вызове API я хотел бы установить «временную» сессию / контекст / любую переменную, которую я могу использовать для установки значения по умолчанию.Однако без необходимости полагаться на модуль запросов 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'})
В «статическом» бэкэнде с одним-user-per-engine setup это может работать, но это не подходит для моего сценария использования API.
Каков наилучший способ достижения вышеуказанного в контексте flask-sqlalchemy, в идеале полагаясь на некоторую функциональность базовогоЯдро SQLAlchemy?
Спасибо!