Django удалить l oop с помощью orm - PullRequest
0 голосов
/ 26 мая 2020

Я получаю данные с URL-адреса. И при вставке данных мне приходится запускать запрос снова и снова.

views.py Как вы можете видеть, здесь дата в json выглядит как «Date: 22-Aug-2019», поэтому я конвертирую ее в формат YYYY-MM-DD и сохраняю в базе данных.

def insert_api_data(request):
    ''' Inserting data from api'''
    dataset = requests.get(config['url']['API_FETCH_URL']).json()
    for data in dataset :
        monthword = data['Date'][3:6]
        newWord = monthword[0].upper() + monthword[1:3].lower() 
        x = strptime(newWord,'%b').tm_mon
        l = data['Date']
        date = l[7:] + '-' + str(x) + '-' + l[:2]
        info = BusinessShareInfo.objects.create(Date = date,Opens=data['Open'],High=data['High'],Low=data['Low'],Close=data['Close'],Shares_Traded=data['Shares Traded'],Turnover=data['Turnover (Rs. Cr)'])
        info.save()
    return render(request,'BusinessShareInfo.html')

В наборе данных есть тысячи записей, извлеченных из json. Я зацикливаю каждую, а затем вставляю. Как я могу выполнить массовую вставку с форматом даты yyyy-mm-dd?

1 Ответ

2 голосов
/ 26 мая 2020

Прежде всего, вы дважды обращаетесь к базе данных, вызывая методы create() и save(). Здесь вам нужен только метод create(). Также есть возможность bulk_create() объектов. Вот пример:

info_set = []
for data in dataset :
    monthword = data['Date'][3:6]
    newWord = monthword[0].upper() + monthword[1:3].lower() 
    x = strptime(newWord,'%b').tm_mon
    l = data['Date']
    date = l[7:] + '-' + str(x) + '-' + l[:2]
    info_set.append(BusinessShareInfo(Date = date,Opens=data['Open'],High=data['High'],Low=data['Low'],Close=data['Close'],Shares_Traded=data['Shares Traded'],Turnover=data['Turnover (Rs. Cr)']))

BusinessShareInfo.objects.bulk_create(info_set)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...