我有一份芹菜工作,可以从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
致谢
答案 0 :(得分:0)
您要依靠硬币市场上限供稿的顺序来保持一致。由于它是按市值进行排名的,因此它将在列表的底部和底部掉落硬币,并且由于您使用的是update_or_create(),因此将创建新条目,而旧条目将被挂起。
如果您想自己跟踪前100名,那么我建议您获得前150名并进行自己的/排序过滤。或者,为模型添加更新时间(auto_now = True),并在更新后删除超过一定时间的任何内容。