Сохранить список строк в базе данных django sql -lite из представления - PullRequest
1 голос
/ 24 апреля 2020

Я хочу сохранить список строк в базе данных django sql -lite из представления. Вот мой кусок кода

def home(request):
    if request.method=='POST':
        tags=request.POST['tag']
        tweets=scrape(tags)
        tweets=preprocessing(tweets)
        tweet=Tweet()
        tweet.text='save the tweet'
        tweet.save()
        return render(request,'home.html',{"tweet":tweets})
    else:
        all_tweets=Tweet.objects.all
        return render(request,'home.html',{"old_tweet":all_tweets})

Следующая три строки может сохранить одну строку (tweet) в моей базе данных

tweet=Tweet()
tweet.text='save the tweet'
tweet.save()

Но у меня есть список строк (tweets) что я хочу сохранить в базе данных. Я хочу сохранить вывод preprocessing(tweets), который является списком в моей базе данных. Если я использую al oop, я думаю, что это делает процесс слишком медленным. Код L oop следующий:

for tw in tweets:
            tweet=Tweet()
            tweet.text=tw
            tweet.save()

Так есть ли эффективный способ. Спасибо

1 Ответ

0 голосов
/ 24 апреля 2020

Не сохраняйте весь список в базе данных, это не будет хорошим дизайном.

Вы можете создать список объектов модели твитов и использовать Django s bulk_create метод хранения их всех сразу.

objs = [Tweet(text=tw) for tw in tweets]
Tweet.objects.bulk_create(objs)

Весь код:

def home(request):
    if request.method=='POST':
        tags=request.POST['tag']
        tweets=scrape(tags)
        tweets=preprocessing(tweets)
        objs=[Tweet(text=tw) for tw in tweets]
        Tweet.objects.bulk_create(objs)
        return render(request,'home.html',{"tweet":tweets})
    else:
        all_tweets=Tweet.objects.all
        return render(request,'home.html',{"old_tweet":all_tweets})
...