gpt4 book ai didi

python - 从 Django 数据库中删除重复对象的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-29 13:23:20 25 4
gpt4 key购买 nike

我正在挖掘 Twitter 搜索 API 以获取特定主题标签的推文,并使用 Django ORM 将它们存储到 Postgresql 数据库中。

这是处理此例程的 tasks.py 文件中的代码。

"""Get some tweets and store them to the database using Djano's ORM."""

import tweepy
from celery import shared_task

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

api = tweepy.API(auth, wait_on_rate_limit=True)


@shared_task(name='get_tweets')
"""Get some tweets from the twiter api and store them to the db."""
def get_tweets():
tweets = api.search(
q='#python',
since='2016-06-14',
until='2016-06-21',
count=5
)
tweets_date = [tweet.created_at for tweet in tweets]
tweets_id = [tweet.id for tweet in tweets]
tweets_text = [tweet.text for tweet in tweets]

for i, j, k in zip(tweets_date, tweets_id, tweets_text):
update = Tweet(
tweet_date=i,
tweet_id=j,
tweet_text=k
)
update.save()

这是我的models.py

from django.db import models


class Tweet(models.Model):
tweet_date = models.DateTimeField()
tweet_id = models.CharField(max_length=50, unique=True)
tweet_text = models.TextField()

def __str__(self):
return str(self.tweet_date) + ' | ' + str(self.tweet_id)

我收到重复项,请对 Twitter API 执行此操作。

有没有办法在对象保存到数据库之前检查重复项。这里:

for i, j, k in zip(tweets_date, tweets_id, tweets_text):
update = Tweet(
tweet_date=i,
tweet_id=j,
tweet_text=k
)
update.save()

这是我可以在此处的提取过程中处理的事情,还是我需要在之后清理的事情,比如在转换阶段?

最佳答案

您可以让您的模型经理为您完成这项工作

from django.db import IntegrityError

for i, j, k in zip(tweets_date, tweets_id, tweets_text):
try:
Tweet.objects.create(
tweet_date=i,
tweet_id=j,
tweet_text=k
)
except IntegrityError:
log('duplicate tweet id {}'.format(j)
pass

关于python - 从 Django 数据库中删除重复对象的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37969101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com