是否可以在 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 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)

相关内容

  • 没有找到相关文章

最新更新