Событие SqlAlchemy «before_insert» не запускается при асинхронной настройкеPython

Программы на Python
Ответить
Anonymous
 Событие SqlAlchemy «before_insert» не запускается при асинхронной настройке

Сообщение Anonymous »


У меня есть такая настройка для класса Order:

класс Order(Base): __tablename__ = 'заказ' id = Column(pgUUID(as_uuid=True), Primary_key=True, default=uuid4, unique=True, nullable=False) user_id = Столбец (String, ForeignKey («user.id»), nullable = False) число = Столбец (Целое число, по умолчанию = 0) статус = Столбец (Enum (Состояние), nullable = False) созданный_at = Столбец (DateTime (часовой пояс = True), server_default = func.now ()) update_at = Column(DateTime(timezone=True), onupdate=func.now()) Я пытаюсь перехватить событиеbefore_insert с помощью этого кода:

@event.listens_for(Order, 'before_insert') async def before_insert (сопоставитель, соединение, цель): # Используйте сеанс, связанный с целью, убедитесь, что он синхронен async_session = AsyncSession (соединение) # Извлекаем текущий год из созданного_at или используем текущий год, если он не установлен curr_year = target.created_at.year, если target.created_at, иначе datetime.now().year # Асинхронный запрос для поиска текущего максимального числа за год результат = ожидание async_session.execute(select(func.max(Order.number)).filter(func.extract('year', Order.created_at) == curr_year)) max_number = result.scalar_one_or_none() # Устанавливаем номер текущего ордера целевой.номер = (макс_номер или 0) + 1 # Закрываем асинхронный сеанс дождитесь async_session.close() engine = create_async_engine (DATABASE_URL, будущее = True, echo = False, Pool_size = 30, max_overflow = 50) async_session = создатель сеанса (движок, expire_on_commit = False, class_ = AsyncSession) асинхронный с async_session() в качестве сеанса: асинхронно с session.begin(): new_order = Order(**kwargs) # kwargs — некоторая информация для создания ордеров session.add(новый_порядок) дождитесь сеанса.flush() Тем не менее, событие никогда не запускается. Есть ли что-то, что я делаю неправильно? Можно ли использовать события Sqlalchemy в асинхронной среде?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»