Я использую 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
Буду признателен за помощь в загрузке этих данных! Большое спасибо за ваше время и помощь! Ура!