sqlalchemy - flask+celery写一个数据库有关的任务,但是更新不上
本文介绍了sqlalchemy - flask+celery写一个数据库有关的任务,但是更新不上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
用flask+celery写的代码没有办法进行更新,但是,直接调用方法却可以。
代码如下
flask和celery代码
def make_celery(app):
celery = Celery('flask_celery', broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
TaskBase = celery.Task
class ContextTask(TaskBase):
abstract = True
def __call__(self, *args, **kwargs):
with app.app_context():
return TaskBase.__call__(self, *args, **kwargs)
celery.Task = ContextTask
return celery
app.config.update(
CELERY_BROKER_URL='amqp://xuewensi:xws09040@110.79.20.125:5672/proxy',
CELERY_RESULT_BACKEND='amqp://xuewensi:xws09040@110.79.20.125:5672/backend',
CELERYD_CONCURRENCY=4,
CELERY_TASK_SERIALIZER='pickle',
CELERY_RESULT_SERIALIZER='pickle',
CELERY_ACCEPT_CONTENT=['pickle']
)
任务代码
def insert(p):
p.check_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
db.session.commit()
调用代码
pro = Proxies.query.first()
insert.delay(pro)
尝试过直接调用,可以update
另外项目结构的话
create_app创建flask实例app
database创建数据库对象,引用app
剩下的文件都import这两个模块里面的实例。
解决方案
因为调用和执行的 db 不是同一个 session,试试
db.session.add(p)
db.session.commit()
这篇关于sqlalchemy - flask+celery写一个数据库有关的任务,但是更新不上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文