Доступ к данным из второй внешней базы данных SQLite в Django
Это структура моего проекта
Я могу получить доступ к базе данных SQLite по умолчанию db.sqlite3
, созданной Django, импортируя модели непосредственно внутри моих файлов представлений
Нравится - from basic.models import table1
Теперь у меня есть другая база данных под названием UTF.db
, которая создана кем-то другим, и я хочу получить доступ к ее данным и выполнить обычные операции QuerySet над полученными данными
Проблема в том, что я не знаю, как импортировать таблицы из этой базы данных, поскольку они не находятся ни в одном файле модели в моем проекте, так как он создан кем-то другим
Я попробовал добавить таблицы внутри базы данных UTF.db
в файл models.py
, сначала добавив их в файл settings.py
следующим образом
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
'otherdb':{
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'UTF.db',
}
}
А затем с помощью команды inspectdb
добавить таблицы в существующий файл models.py
Команда, которую я опробовал -
python manage.py inspectdb > models.py
Но это только приводит к тому, что мой файл models.py становится пустым
Кто-нибудь знает, как это можно решить?
В конце концов, я хочу импортировать данные таблицы внутрь моих файлов представлений путем импорта соответствующей модели
Вы можете указать конкретную базу данных, как указано в Документации
python manage.py inspectdb --database=otherdb > your_app/models.py
Также, если возможно, лучше поместить otherdb в другое приложение.
Вы можете присоединить вторую базу данных к первой и использовать ее из первой базы данных. Вы можете использовать таблицы из обеих баз данных в одном sql-запросе. Вот документ https://www.sqlite.org/lang_attach.html.
attach database '/path/to/dbfile.sqlite' as db_remote;
select *
from some_table
join db_remote.remote_table on ....
detach database db_remote;
ответ @sevdimali отлично работает для создания новых моделей из существующей базы данных
После этого необходимо использовать команду -
python manage.py makemigrations
Чтобы добавить изменения в папку миграций
Затем используйте команду
python manage.py --fake-initial
Добавить новые изменения в вашу базу данных
Примечание: Используйте --fake-initial, чтобы игнорировать уже созданные таблицы при добавлении новых таблиц (чтобы они не были созданы заново)
Если нет существующих моделей, которые можно использовать
python manage.py migrate
Так же, как вы делаете это обычно
Теперь при импорте модели базы данных внутри вашего представления вы можете написать
from Appname.models import Tablename
Где Appname - это приложение, в которое вы добавили новые модели
И для доступа к его данным
qs=Tablename.objects.using('otherdb').all()
Примечание: otherdb
- это имя внешней базы данных, указанное в файле settings.py
Теперь вы можете получить доступ ко всем своим данным подобным образом!!!