是否可以使用celery在tasks.py中进行查询

时间:2017-08-26 14:37:59

标签: python django celery

对芹菜完全不熟悉,并想知道你是否可以在芹菜任务内的桌子上运行查询?

芹菜正在工作,我可以排队工作,但是,我试过这个并且它给出了一个错误:

import celery
from celery import shared_task

from django.shortcuts import get_object_or_404
from frontendapp.models import xlinkdatabase

@shared_task
def lookup(lookup_id):
    look_up_result = get_object_or_404(xlinkdatabase,MEMBER_ID=lookup_id)
    return look_up_result

错误:

kombu.exceptions.EncodeError: Object of type 'xlinkdatabase' is not JSON serializable

我做错了什么?

修改

问题是我正在尝试浏览ID列表(在csv文件中输入),我想在该ID中添加电子邮件地址并将其写入新的CSV文件中。 ID /电子邮件关系在我的psql xlinkdatabase模型中。

查找的整个想法不是返回一个对象。我想要一个在我的psql数据库中进行查找的任务(与模型相关),并从该特定搜索中选择一个值。

models.py:

class xlinkdatabase(models.Model):
    uniqueid = models.AutoField(primary_key=True)
    MEMBER_ID = models.DecimalField(verbose_name="Member id",max_digits=19, decimal_places=0,default=Decimal('0'))
    MEMBER_PRIMARY_EMAIL = models.CharField(verbose_name="Email address", max_length = 150, default="not set")

我想根据我放入任务的MEMBER_PRIMARY_EMAIL返回MEMBER_ID地址。

1 个答案:

答案 0 :(得分:0)

来自芹菜文档

  

客户端和工作人员之间传输的数据需要序列化,因此Celery中的每条消息都有一个content_type标头,用于描述用于对其进行编码的序列化方法。

所以你不能从芹菜工人那里归还一个物品。

解决方案

from django.core import serializers
import celery
from celery import shared_task

from django.shortcuts import get_object_or_404
from frontendapp.models import xlinkdatabase

@shared_task
def lookup(lookup_id):
    look_up_result = get_object_or_404(xlinkdatabase,MEMBER_ID=lookup_id)
    return serializers.serialize("json", look_up_result)