/ / Django: Динамична база данни - django, django-models, django-database

Джанго: файл с динамична база данни - django, django-models, django-database

В моя проект "Джанго" имам зависимост от приложение на трета страна, което създава SQLite кеш файлове в различни директории с позната схема.

Бих искал да използвам Django модели за достъп до тези бази данни, но очевидно не мога да използвам статичен DATABASES настройвам.

Как мога да отворя динамично SQLite база данни на произволен път?

РЕДАКТИРАНЕ

Както посочи Байрон Рут, решението е да се използва django.db.connections във връзка с using функция в QuerySet.

Отговори:

29 за отговор № 1

Най- django.db.connections е просто обвивка наоколо DATABASES дефинирани във вашите настройки. Обвивката клас е тук: django.db.utils # L137-L227

from django.db import connections

# Add connection information dynamically..
connections.databases["new-alias"] = { ... }
# Ensure the remaining default connection information is defined.
# EDIT: this is actually performed for you in the wrapper class __getitem__
# method.. although it may be good to do it when being initially setup to
# prevent runtime errors later.
# connections.databases.ensure_defaults("new-alias")

# Use the new connection
conn = connections["new-alias"]

4 за отговор № 2

Можете да регистрирате база данни в настройките на DATABASES.

from your_project import settings
database_id = "unqique_name"
new_database = {}
new_database["id"] = database_id
new_database["ENGINE"] = "django.db.backends.sqlite3"
new_database["NAME"] = "/project/data/db_%s.sql" % database_id
new_database["USER"] = ""
new_database["PASSWORD"] = ""
new_database["HOST"] = ""
new_database["PORT"] = ""
settings.DATABASES[database_id] = new_database

Можете, но не трябва.


2 за отговор № 3

Ако приемем, че единственият използван двигател е SQLite и местоположението на (само) файла на базата данни е различно, NAME:

def get_db_loc():
# code to determine filesystem location of database
return location

DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": get_db_loc(),
# More config goes here
}
}