对芹菜完全陌生,想知道是否可以对芹菜任务中的表运行查询?
芹菜正在工作,我可以对作业进行排队,但是,我尝试了这个,它给出了一个错误:
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_ID
返回MEMBER_PRIMARY_EMAIL
地址。
来自芹菜文档
在客户端和工作线程之间传输的数据需要序列化,因此 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)