Session 延迟芹菜任务中的SQLAlchemy会话处理
我通过SQLAlchemy使用关系数据库。我想创造一个使用芹菜处理数据库的工作。有一个代码:Session 延迟芹菜任务中的SQLAlchemy会话处理,session,sqlalchemy,task,celery,Session,Sqlalchemy,Task,Celery,我通过SQLAlchemy使用关系数据库。我想创造一个使用芹菜处理数据库的工作。有一个代码: from sqlalchemy.orm.session import Session from celery.task import task from myapp.user import User @task def job(user): # job... session = Session.object_session(user) with user.begin():
from sqlalchemy.orm.session import Session
from celery.task import task
from myapp.user import User
@task
def job(user):
# job...
session = Session.object_session(user)
with user.begin():
user.value = result_value
def ordinary_web_request_handler(uid):
assert isinstance(session, Session)
user = session.query(User).get(int(uid))
# deals with user...
job.delay(user)
return response
我需要在延迟的作业中使用SQLAlchemy会话,但是还没有会话。如何将会话设置为已传递的用户
实体
我有很多想法,但我不确定哪一种(或没有一种)是最佳实践:
- 始终仅传递主键,并通过传递的主键检索新实例
- 设置所传递实例的会话(但我不知道如何设置)
- 不要在延迟的任务中使用ORM
您应该能够使用工作信号启动会话:
如果您使用类似单例的模式来确保该线程中始终有可用的会话,那么一切都应该正常工作。您应该能够使用工作信号启动会话:
如果您使用类似单例的模式来确保该线程中始终有可用的会话,那么一切都应该正常工作