我写了一个新闻聚合器服务,我每5分钟运行一次定期任务,根据投票获取热门故事并将数据保存到数据库。
一切正常,但我遇到了问题。
在每5分钟,可能有也可能没有新条目,我的服务将重复条目保存到DB。
如果我使用unique=True
那么我的芹菜工作者会显示有关django唯一约束违规和崩溃的错误。
有没有办法避免重复数据而不会出错。
我知道也许这不是最好的做法,但我有这个用例。 请在django中建议如何做到这一点。
model.py
class Article(models.Model):
username = models.CharField(max_length=20)
title = models.CharField(max_length=200)
url = models.URLField(max_length=100)
upvotes = models.PositiveIntegerField()
description = models.TextField(max_length=500,null=True)
sentiment = models.CharField(max_length=20)
class Meta:
verbose_name = "Article"
verbose_name_plural = "Articles"
unique_together = (("title", "url"),)
tasks.py
@periodic_task(
run_every=(crontab(minute='*/5')),
name="add",
ignore_result=False
)
def add():
response = requests.get(TOP_STORIES, headers=headers)
for i in response.json()[:10]:
response_id = requests.get(
"some_url".format(id=str(i)),
headers=headers)
item = response_id.json()
params = {
"txt": item.get("title")
}
response_senti = requests.post(
"https://community-sentiment.p.mashape.com/text/", headers=headers_sent, data=params
)
senti = response_senti.json().get("result")
Article.objects.create(username=item.get("by"),
title=item.get("title"),
url=item.get("url"),
upvotes=item.get("score"),
sentiment=senti.get("sentiment")
)