1
我正在挖掘Twitter搜索API以獲取某個hashtag的推文,並使用Django ORM將它們存儲到Postgresql數據庫中。什麼是從Django數據庫中刪除重複的對象的最佳方法
以下是處理此例程的我的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()
這是不是我可以照顧在提取過程在這裏還是我需要後來清理,就像在轉型階段的東西?
到什麼領域是你指當你說'duplicate'的工作嗎? –
'tweet_id'必須是唯一的,我在模型中設置爲唯一,但是當Celery嘗試創建新對象並將它們保存到數據庫時,它會掛起一個關鍵錯誤。 –