Найти в Дзене
Роман Дмитриев

Как обмануть букмекера? Сбор данных. Часть 2. Сохраняем данные о событиях.

Перед чтением этой статьи стоит ознакомиться с первой частью Сегодня нам надо решить, каким образом мы будем хранить наши данные. Напомню, что сейчас мы получаем информацию по событиям, но ничего с ними не делаем. Перед тем, как начать наши исследования нужно каким-то образом сохранять данные. Способ №1 Сохранение в файл У этого способа, очевидно, есть как преимущества, так и недостатки. Кратко разберем. Плюсы: Минусы: Минусы тут сильно перевешивают плюсы, поэтому этот способ мы использовать не будем. Способ №2 База данных Плюсы: Минусы: Очевидно, что базы данных - это то, что нам надо. И минусы нам не страшны. Есть много различных баз данных. Для нас подойдет легкая и файловая база данных sqlite. Ну, тогда начнем. Импортируем библиотеку и посмотрим, как создать базу данных. Базы данных состоят из таблиц и правил. Уже по этому лишь смыслу получается, что нужно создать отдельный класс с обработчиком запросов. Разберем чуть подробнее. В таблице event будем хранить данные по матчу, кото
Оглавление

Перед чтением этой статьи стоит ознакомиться с первой частью

Сегодня нам надо решить, каким образом мы будем хранить наши данные. Напомню, что сейчас мы получаем информацию по событиям, но ничего с ними не делаем. Перед тем, как начать наши исследования нужно каким-то образом сохранять данные.

Способ №1

Сохранение в файл

У этого способа, очевидно, есть как преимущества, так и недостатки. Кратко разберем.

Плюсы:

  1. Легко просматривать сохраненные данные
  2. Очень просто записывать информацию

Минусы:

  1. Не безопасно
  2. Сложная обработка файла с данными
  3. Файлов будет либо слишком много, либо будет один большой и тяжелый файл

Минусы тут сильно перевешивают плюсы, поэтому этот способ мы использовать не будем.

Способ №2

База данных

Плюсы:

  1. Данные хранятся в сжатом виде
  2. Можно писать гибкие запросы
  3. Данные структурированы

Минусы:

  1. Необходимо умение создавать sql-запросы
  2. Необходим дополнительный обработчик

Очевидно, что базы данных - это то, что нам надо. И минусы нам не страшны. Есть много различных баз данных. Для нас подойдет легкая и файловая база данных sqlite. Ну, тогда начнем.

Импортируем библиотеку и посмотрим, как создать базу данных.

Если указанный файл базы данных не присутствует, то он будет автоматически создан
Если указанный файл базы данных не присутствует, то он будет автоматически создан

Базы данных состоят из таблиц и правил. Уже по этому лишь смыслу получается, что нужно создать отдельный класс с обработчиком запросов.

Написали новый класс и вуаля, есть первая таблица, но пока пустая
Написали новый класс и вуаля, есть первая таблица, но пока пустая

Разберем чуть подробнее. В таблице event будем хранить данные по матчу, которые не будут обновляться слишком часто. Мы создали первую таблицу и давайте теперь напишем метод, с помощью которого будем записывать туда информацию.

Обратите внимание на правую часть. Как красиво выглядят такие таблицы и какой же результативный матч получился!
Обратите внимание на правую часть. Как красиво выглядят такие таблицы и какой же результативный матч получился!

Сейчас мы добавили в нашу таблицу запись вручную. Но хотелось бы добавлять реальные данные автоматически. Оставляем в этом файле все как есть и переходим обратно в data_load.py

Все лучше и лучше. <- кто понял отсылку, ставь лайк :)
Все лучше и лучше. <- кто понял отсылку, ставь лайк :)

Мы конечно же получили и сохранили данные, но теперь есть несколько проблем.

Запустив файл data_load.py еще раз, мы запишем данные еще раз и у нас появятся дубликаты, а если матч в статусе live, то мы, возможно, будет меняться и счет. Надо поставить ограничения на таблицу. Если быть точнее, то id в таблице event должен быть уникальным.

Достаточно указать этот пункт(UNIQUE) рядом с типом таблицы и пересоздать ее.
Достаточно указать этот пункт(UNIQUE) рядом с типом таблицы и пересоздать ее.

Теперь, если мы пытаемся добавить запись, id которой совпадает с тем, что есть в базе, то мы получаем ошибку. База данных не позволяет сделать такое безобразие и это одно из преимуществ его использования.

Обратите внимание на ошибку
Обратите внимание на ошибку

Но и это еще не все. Время движется вперед, у событий меняется не только статус, но и счет. Придется как-то обрабатывать этот момент.

Файл db.py
Файл db.py

Добавили также пометку, какие id обновляются, а какие добавляются
Добавили также пометку, какие id обновляются, а какие добавляются

Все работает, и даже не падает. Конечно, сложно заранее предугадать, какую информацию вернет API от букмекера завтра и вполне возможно, что этот код работает только некоторое время и потом придется исправлять ошибки вручную.

Так выглядит наша таблица.
Так выглядит наша таблица.

Что в итоге? Мы научились сохранять информацию о матчах в базу данных. Но это еще не все. Есть несколько проблем:

  1. Как определить, что матч завершился?
  2. Мы еще не сохраняем информацию по ставкам

Эти проблемы мы будем решать уже в следующей статье. Спасибо за ваше внимание.