Как загрузить данные из файлов JSON в экземпляр MySQL с помощью Django ORM? - PullRequest
0 голосов
/ 08 мая 2019

Я использую Django для создания механизма ETL и разработал несколько методов для извлечения и преобразования данных из некоторых конечных точек API, которые локально сохраняются на моей машине в формате .JSON. Номенклатура форматов файлов выглядит следующим образом: repos_transformed_2019-05-06-13-23-59.json и repos_extraction_2019-05-06-13-23-59.json в случае, если это имеет значение для поиска в Django ORM.

У меня запущен экземпляр MySQL, схема которого точно соответствует ключам, которые определены в моем файле .JSON, но ORM Django не загружает данные в мою базу данных из команды loaddata. Я должен вручную создать экземпляр модели и жестко закодировать все вручную. Очевидно, что это не будет работать в производственной среде, и я пытаюсь найти способ загрузить эти данные в виде «пакетов» файла .json без необходимости вручную проверять это.

После прочтения документов (в частности, loaddata) я пытаюсь загрузить его в свою базу данных следующим образом:

django-admin loaddata repos_transformed_2019-05-06-13-23-59.json --database invisible-hand

и я получаю сообщение об ошибке по каким-то причинам:

django.core.exceptions.ImproperlyConfigured: Requested setting TEMPLATES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

Вот фрагмент моего преобразованного файла .JSON:

[{'repo_id': 20661, 'repo_name': 'Edge', 'creation_date': '2018-09-29T21:28:51Z', 'last_updated': '2018-12-05T19:30:11Z', 'watchers': 0, 'forks_count': 0, 'issues_count': 0, 'main_language': 'CSS', 'repo_size': 4252}, ...]

и вот схема MySQL:

mysql> describe app_repository;
+---------------+------------------+------+-----+---------+-------+
| Field         | Type             | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+-------+
| creation_date | varchar(21)      | YES  |     | NULL    |       |
| last_updated  | varchar(30)      | YES  |     | NULL    |       |
| main_language | varchar(30)      | YES  |     | NULL    |       |
| qty_forks     | int(10) unsigned | YES  |     | NULL    |       |
| qty_issues    | int(10) unsigned | YES  |     | NULL    |       |
| qty_watchers  | int(10) unsigned | YES  |     | NULL    |       |
| repo_id       | int(10) unsigned | YES  |     | NULL    |       |
| repo_name     | varchar(50)      | NO   | PRI | NULL    |       |
| repo_size     | int(10) unsigned | YES  |     | NULL    |       |
+---------------+------------------+------+-----+---------+-------+

Я могу ввести shell и вручную ввести данные, как в документах , но это не масштабируемое решение проблемы.

Я ожидаю, что смогу автоматически синхронизировать файлы .JSON с соответствующими таблицами.

Все мои извлеченные и преобразованные файлы .json хранятся в /django_project_name/django_app_name/fixtures, а в моем settings.py файле я установил путь к файлу фикстуры:

# Fixtures that get loaded into the DB instance
FIXTURE_DIRS = (
    '/django_project_name/django_app_name/fixtures',
)

мои шаблоны структурированы так:

├── django_project_name
│   ├── django_app_name
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-37.pyc
│   │   │   ├── admin.cpython-37.pyc
│   │   │   ├── models.cpython-37.pyc
│   │   │   ├── urls.cpython-37.pyc
│   │   │   └── views.cpython-37.pyc
│   │   ├── admin.py
│   │   ├── apps.py
│   │   ├── migrations
│   │   │   ├── 0001_initial.py
│   │   │   ├── 0002_auto_20190506_1238.py
│   │   │   ├── 0003_auto_20190506_1629.py
│   │   │   ├── __init__.py
│   │   │   └── __pycache__
│   │   │       ├── 0001_initial.cpython-37.pyc
│   │   │       ├── 0002_auto_20190506_1238.cpython-37.pyc
│   │   │       ├── 0003_auto_20190506_1629.cpython-37.pyc
│   │   │       └── __init__.cpython-37.pyc
│   │   ├── models.py
│   │   ├── templates
│   │   │   └── app
│   │   │       ├── discussions.html
│   │   │       ├── repositories.html
│   │   │       ├── repository.html
│   │   │       ├── team_members.html
│   │   │       └── teams.html
│   │   ├── tests.py
│   │   ├── urls.py
│   │   └── views.py
│   ├── db.sqlite3
│   ├── fixtures
│   │   ├── initial_data.json
│   │   ├── repos_extraction_2019-05-06-13-23-59.json
│   │   ├── repos_transformed_2019-05-06-13-23-59.json
│   │   ├── teams_extraction_2019-05-06-15-49-47.json
│   │   └── teams_transformed_2019-05-06-15-49-47.json
│   ├── iHand
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-37.pyc
│   │   │   ├── settings.cpython-37.pyc
│   │   │   ├── urls.cpython-37.pyc
│   │   │   └── wsgi.cpython-37.pyc
│   │   ├── settings.py
│   │   ├── urls.py
│   │   └── wsgi.py
│   └── manage.py

Буду признателен за помощь в загрузке этих данных! Большое спасибо за ваше время и помощь! Ура!

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