In meinem Django-Projekt habe ich eine Abhängigkeit für eine Drittanbieteranwendung, die SQLite-Cache-Dateien in verschiedenen Verzeichnissen mit einem bekannten Schema erzeugt.
Ich möchte Django-Modelle für den Zugriff auf diese Datenbanken verwenden, aber offensichtlich kann ich keine Statik verwenden DATABASES
Konfiguration.
Wie kann ich eine SQLite-Datenbank auf einem beliebigen Pfad dynamisch öffnen?
BEARBEITEN
Wie Byron Ruth darauf hinwies, ist die Lösung die Verwendung der django.db.connections
In Verbindung mit using
Funktion im QuerySet.
Antworten:
29 für die Antwort № 1Das django.db.connections
ist eine einfache Hülle DATABASES
in Ihren Einstellungen definiert. Die Wrapper-Klasse ist hier:
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 für die Antwort № 2
Sie können die Datenbank in den DATENBANKEN-Einstellungen registrieren.
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
Sie können, aber Sie sollten nicht.
2 für die Antwort № 3
Angenommen, die einzige Engine, die verwendet wird, ist SQLite und der Speicherort der (einzigen) Datenbankdatei ist unterschiedlich 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
}
}