Сбор и хранение данных из API с помощью запросов на языке python в базе данных SQLite
Я новичок в python и django. Но я пытаюсь создать приложение в моем проекте, которое собирает данные о коэффициентах из API, затем разбирает то, что мне нужно из json, а затем сохраняет это в таблице в базе данных SQLite.
На данный момент у меня есть следующее, что дает мне данные, которые я хотел бы собирать и хранить. Данные нужно будет вызывать и обновлять, если они изменились, один или два раза в день, чтобы обеспечить их актуальность.
def BluebetNrlOdds():
"""Fetch and extract JSON data from Bluebet Australia"""
import requests
import json
# Bluebet Rugby League Odds API.
link = 'https:/xxxxxxxxxx.com.au/json/reply/MasterCategoryRequest?EventTypeID=102&WithLevelledMarkets' \
'=true&WithLevelledMarkets=true '
# Request data from link as 'str'
nrldata = requests.get(link).text
# convert 'str' to Json
nrldata = json.loads(nrldata)
# NRL ODDS DATA
for nrl_odds in nrldata['MasterCategories'][0]['Categories'][0]['MasterEvents']:
competition = nrl_odds['CategoryName']
event_id = nrl_odds['MasterEventId']
event_title = nrl_odds['MasterEventName']
start_time = nrl_odds['MaxAdvertisedStartTime']
home_team = nrl_odds['Markets'][0]['OutcomeName']
home_team_win_odds = nrl_odds['Markets'][0]['Price']
home_team_win_handicap = nrl_odds['Markets'][2]['Points']
home_team_handicap_odds = nrl_odds['Markets'][2]['Price']
home_team_1_12 = nrl_odds['Markets'][4]['Price']
home_team_13 = nrl_odds['Markets'][6]['Price']
away_team = nrl_odds['Markets'][1]['OutcomeName']
away_team_win_odds = nrl_odds['Markets'][0]['Price']
away_team_win_handicap = nrl_odds['Markets'][3]['Points']
away_team_win_handicap_odds = nrl_odds['Markets'][3]['Price']
away_team_1_12 = nrl_odds['Markets'][5]['Price']
away_team_13 = nrl_odds['Markets'][7]['Price']
print(competition, event_id, event_title, start_time, home_team, home_team_win_odds, home_team_win_handicap, home_team_handicap_odds, home_team_1_12, home_team_13, away_team, away_team_win_odds, away_team_win_handicap, away_team_win_handicap_odds, away_team_1_12, away_team_13)
когда вы запускаете этот код, он печатает
NRL Telstra Premiership 1047531 Penrith Panthers v Parramatta Eels 2022-09-09T09:55:00.0000000Z Penrith Panthers 1.4 -7.5 1.95 2.85 2.58 Parramatta Eels 1.4 7.5 1.85 3.8 7.6
NRL Telstra Premiership 1047539 Melbourne Storm v Canberra Raiders 2022-09-10T07:40:00.0000000Z Melbourne Storm 1.4 -8.5 2.0 3.05 2.52 Canberra Raiders 1.4 8.5 1.8 3.85 7.9
NRL Telstra Premiership 1047538 Cronulla-Sutherland Sharks v North Queensland Cowboys 2022-09-10T09:50:00.0000000Z Cronulla-Sutherland Sharks 1.7 -2.5 1.9 3.1 3.45 North Queensland Cowboys 1.7 2.5 1.9 3.35 5.2
NRL Telstra Premiership 1047530 Sydney Roosters v South Sydney Rabbitohs 2022-09-11T06:05:00.0000000Z Sydney Roosters 1.6 -4.5 1.95 2.95 3.15 South Sydney Rabbitohs 1.6 4.5 1.85 3.6 5.8
Теперь мне нужно сохранить эти данные в базе данных SQlite.
На данный момент у меня есть отдельный файл database.py, в котором есть следующий код
import sqlite3
# connect to database
connection = sqlite3.connect('puntsportsau')
# create cursor
c = connection.cursor()
c.execute("""SELECT TABLE bluebet_au_rugby_league_odds
(
competition text,
event_id integer
constraint bluebet_au_rugby_league_odds_pk
primary key,
event_title text,
start_time integer,
home_team text,
home_team_win_odds integer,
home_team_handicap integer,
home_team_handicap_odds integer,
home_team_1_12 integer,
home_team_13 integer,
away_team integer,
away_team_win_odds integer,
away_team_handicap integer,
away_team_handicap_odds integer,
away_team_13 integer
, away_team_1_12 integer)
;""")
connection.commit()
connection.close()
В файле models.py для пакета у меня есть следующее
# Rugby League Odds
class BluebetNrlOdds(models.Model):
competition = models.CharField(max_length=255)
event_id = models.IntegerField
event_title = models.TextField(max_length=250)
start_time = models.DateTimeField(auto_now_add=True)
home_team = models.CharField(max_length=255)
home_team_win_odds = models.IntegerField
home_team_handicap = models.IntegerField
home_team_handicap_odds = models.IntegerField
home_team_1_12 = models.IntegerField
home_team_13 = models.IntegerField
away_team = models.CharField(max_length=255)
away_team_win_odds = models.IntegerField
away_team_handicap = models.IntegerField
away_team_handicap_odds = models.IntegerField
away_team_1_12 = models.IntegerField
away_team_13 = models.IntegerField
class Meta:
verbose_name = 'Bluebet NRL Odds'
verbose_name_plural = 'Bluebet NRL Odds'
def __str__(self):
return self.name
Я застрял на том, как я могу получить данные, собранные и разобранные из запросов, чтобы сохранить их в таблице базы данных SQlite. Мне нужно делать это один или два раза в день.
Может ли кто-нибудь подсказать, что мне нужно сделать, или показать пример, с которым я могу работать, чтобы разобраться в этом?
Надеюсь, этого достаточно, дайте мне знать, если вам понадобится дополнительная помощь.
Любая помощь будет высоко оценена.
Добро пожаловать в мир Python и Django;
Вы можете запускать команды Django с заданием кукурузы, чтобы построить полный сценарий использования.
КАК создать пользовательскую команду вызвать
BluebetNrlOdds
в функцииhandle
и получить данные и сохранить их, используя модельBluebetNrlOdds
. Вы также можете взглянуть на bulk_create.- .
Краткие заметки:
В Python имя функции должно соответствовать руководству PEP-8. Вы можете прочитать больше о PEP-8 style-guide
Имена функций должны быть строчными, слова разделяются подчеркиванием, если это необходимо для улучшения читабельности. Имена переменных следуют тому же соглашению, что и имена функций. Смешанный регистр допускается только в контекстах, где этот стиль уже преобладает (например, в threading.py), чтобы сохранить обратную совместимость.
Отказаться от использования database.py.
Проект Django может обрабатывать подключение курсора, используя settings.DATABASES
Я бы посоветовал вам пройти курс building your first Django app, в котором вы узнаете, как быстро начать Django-проект, а также концепции использования manag.py
settings.py
и т.д.