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



我正在挖掘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

相关内容

  • 没有找到相关文章

最新更新