Сбор и хранение данных из 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 с заданием кукурузы, чтобы построить полный сценарий использования.

Краткие заметки:

В Python имя функции должно соответствовать руководству PEP-8. Вы можете прочитать больше о PEP-8 style-guide

Имена функций должны быть строчными, слова разделяются подчеркиванием, если это необходимо для улучшения читабельности. Имена переменных следуют тому же соглашению, что и имена функций. Смешанный регистр допускается только в контекстах, где этот стиль уже преобладает (например, в threading.py), чтобы сохранить обратную совместимость.

Отказаться от использования database.py. Проект Django может обрабатывать подключение курсора, используя settings.DATABASES

Я бы посоветовал вам пройти курс building your first Django app, в котором вы узнаете, как быстро начать Django-проект, а также концепции использования manag.py settings.py и т.д.

Вернуться на верх