Celery Jobs将数据保存错误或过多

时间:2019-03-26 16:10:19

标签: python celery

我有一份芹菜工作,可以从coinmarketcap.com获取一些Crypto-Rates-Data。 如果该工作多次被触发,那么我在数据库中没有100个结果,那么我总是得到101-108条记录。为什么呢?

tasks.py

def get_exchange_rate():
    api_url = "https://api.coinmarketcap.com/v1/ticker/?limit=100"
    try:
        exchange_rates = requests.get(api_url).json()
        for exchange_rate in exchange_rates:
            CryptoPrices.objects.update_or_create(
                key=exchange_rate['id'],
                symbol=exchange_rate['symbol'],
                defaults={
                    "market_cap_usd": round(float(exchange_rate['market_cap_usd']), 3),
                    "volume_usd_24h": round(float(exchange_rate['24h_volume_usd']), 3),
                    "value": round(float(exchange_rate['price_usd']), 2)
                })
        logger.info("Crypto rate(s) updated successfully.")
    except Exception as e:
        print(e)

是否有任何方法可以限制该表在数据库中的最大条目数? 最后我想精确地有100

致谢

1 个答案:

答案 0 :(得分:0)

您要依靠硬币市场上限供稿的顺序来保持一致。由于它是按市值进行排名的,因此它将在列表的底部和底部掉落硬币,并且由于您使用的是update_or_create(),因此将创建新条目,而旧条目将被挂起。

如果您想自己跟踪前100名,那么我建议您获得前150名并进行自己的/排序过滤。或者,为模型添加更新时间(auto_now = True),并在更新后删除超过一定时间的任何内容。