2017-08-26 84 views
-1

對芹菜完全陌生並想知道是否可以在芹菜任務內的表上運行查詢?是否有可能在芹菜的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地址。

+0

你不能從任務返回一個對象。你必須返回可序列化的東西。就像你可以將你的對象轉換成json –

+0

我編輯我的問題,所以它更清晰。我不想返回一個對象persé。 – radzia2

+0

那你究竟回來了什麼?它是成員主要電子郵件地址的列表嗎?如果是這樣,那麼下面的答案將工作 –

回答

0

芹菜文檔

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) 
相關問題