[x] Структура dump.json состоит из списка словарей, где каждый словарь описывает картинку обложки из поста ВК:
Поле дампа
Поле таблицы
Комментарий
post_id
-
Id поста
post_url
Cover.url_post
Ссылка на пост с картинкой
post_text
-
Текст поста. Нужен только для дампа, чтобы проще было заполнять поля authors и game_name
photo_file_name
Cover.file_name
Путь к картинке обложке, относительно корня проекта
photo_post_url
Cover.url_post_image
Адрес к картинке обложки в посте
authors
-
Список из словарей, описывающих автора(-ов) обложки
authors[]/id
Author.id
Id пользователя
authors[]/name
Author.name
Имя пользователя
cover_text
Cover.text
Текст на обложке
game_name
Game.name
Оригинальное название игры
game_series
GameSeries.name
Название серии игры
[x] При поиске игры и серии нужно искать по имени
[x] При поиске автора нужно искать по id
[x] Лучше сначала заполнить таблицы, не состоящие из других таблицами, такие как Game, GameSeries, Author.
Не всегда у игр может быть серия, а у обложек автор.
~Скорее всего, понадобится несколько циклов: первый для простых таблиц, второй (и последующие) для сложных таблиц~.
Алгоритм примерно такой:
Если серия задана, ищешь ее в базе, если нет, то создаешь, иначе серия = None
Ищешь или создаешь игру, указывая серию
Ищешь или создаешь обложку, указывая игру
Ищешь или создаешь авторов, если есть. При создании авторов нужно будет заполнить связь авторов к обложке, указав
При заполнении из дампа используй сначала get_or_none и если вернется None, то вызывай create (про методы см. ниже). Выглядит костыльно, т.к. есть метод класса get_or_create, но он не поддерживается классом SqliteQueueDatabase из-за особенностей его работы
[x] Основные методы работы с peewee
get_or_none - метод класса для получения объекта модели по запросу, если объект не будет найдет метод вернет None
create - метод класса для создания записи в таблице базы
save - метод объекта для сохранения изменений в текущем объекте-модели
Cover.url_post
Cover.file_name
Cover.url_post_image
Author.id
Author.name
Cover.text
Game.name
GameSeries.name
[x] Лучше сначала заполнить таблицы, не состоящие из других таблицами, такие как
Game
,GameSeries
,Author
. Не всегда у игр может быть серия, а у обложек автор. ~Скорее всего, понадобится несколько циклов: первый для простых таблиц, второй (и последующие) для сложных таблиц~. Алгоритм примерно такой:При заполнении из дампа используй сначала
get_or_none
и если вернетсяNone
, то вызывайcreate
(про методы см. ниже). Выглядит костыльно, т.к. есть метод классаget_or_create
, но он не поддерживается классомSqliteQueueDatabase
из-за особенностей его работыNone