Flask-sqlalchemy временная сессия / переменная контекста - PullRequest
1 голос
/ 04 июня 2019

Я предоставляю 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?

Спасибо!

...