是否有可能在芹菜的tasks.py中执行查询
问题描述:
对芹菜完全陌生并想知道是否可以在芹菜任务内的表上运行查询?是否有可能在芹菜的tasks.py中执行查询
芹菜是工作,我可以排队的工作,但是,我想这和它给出了一个错误:
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 xlink数据库模型中。
查找的整个想法不是返回一个对象。我想有一个任务在我的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_ID
我把任务的MEMBER_PRIMARY_EMAIL
地址。
答
芹菜文档
Data transferred between clients and workers needs to be serialized, so every message in Celery has a content_type header that describes the serialization method used to encode it.
所以你不能从芹菜工人返回一个对象。
解决方案:
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)
你不能从任务返回一个对象。你必须返回可序列化的东西。就像你可以将你的对象转换成json –
我编辑我的问题,所以它更清晰。我不想返回一个对象persé。 – radzia2
那你究竟回来了什么?它是成员主要电子邮件地址的列表吗?如果是这样,那么下面的答案将工作 –