我在我的Django應用程序兩款車型,我想他們的表/數據庫存儲在單獨的DB/sqlite3的文件,而不是默認的「db.sqlite3」文件。 單Django應用程序使用多個sqlite3的文件數據庫
如:
我的models.py有兩類 列車和 總線,我希望他們能夠被存儲在 train.db和 bus.db
我在我的Django應用程序兩款車型,我想他們的表/數據庫存儲在單獨的DB/sqlite3的文件,而不是默認的「db.sqlite3」文件。 單Django應用程序使用多個sqlite3的文件數據庫
當然,你總是可以只使用Train.objects.using('train')
您的來電,並會選擇正確的數據庫(假設你在settings.py
定義了一個名爲train
數據庫。
如果你不想這樣做,我也有類似的問題,我調整我的解決方案到你的案件。這是部分基於this blog article和數據庫路由器Django文檔是here。
有了這個解決方案當前的數據庫不會受到影響,但當前數據也不會被轉移到新的數據庫。根據您的Django版本,您需要包含allow_syncdb
或allow_migrate
的正確版本。
在settings.py:
DATABASES = {
'default': {
'NAME': 'db.sqlite3',
'ENGINE': 'django.db.backends.sqlite3',
},
'train': {
'NAME': 'train.db',
'ENGINE': 'django.db.backends.sqlite3',
},
'bus': {
'NAME': 'bus.db',
'ENGINE': 'django.db.backends.sqlite3',
},
}
DATABASE_ROUTERS = [ 'yourapp.DatabaseAppsRouter']
DATABASE_APPS_MAPPING = {'train': 'train', 'bus': 'bus'}
在一個新的文件名爲database_router.py:
from django.conf import settings
class DatabaseAppsRouter(object):
"""
A router to control all database operations on models for different
databases.
In case an app is not set in settings.DATABASE_APPS_MAPPING, the router
will fallback to the `default` database.
Settings example:
DATABASE_APPS_MAPPING = {'model_name1': 'db1', 'model_name2': 'db2'}
"""
def db_for_read(self, model, **hints):
"""Point all read operations to the specific database."""
return settings.DATABASE_APPS_MAPPING.get(model._meta.model_name, None)
def db_for_write(self, model, **hints):
"""Point all write operations to the specific database."""
return settings.DATABASE_APPS_MAPPING.get(model._meta.model_name, None)
def allow_relation(self, obj1, obj2, **hints):
"""Have no opinion on whether the relation should be allowed."""
return None
def allow_syncdb(self, db, model): # if using Django version <= 1.6
"""Have no opinion on whether the model should be synchronized with the db. """
return None
def allow_migrate(db, model): # if using Django version 1.7
"""Have no opinion on whether migration operation is allowed to run. """
return None
def allow_migrate(db, app_label, model_name=None, **hints): # if using Django version 1.8
"""Have no opinion on whether migration operation is allowed to run. """
return None
(編輯:這也是什麼喬伊·威廉建議)
感謝您爲代碼示例的工作。 :)這正是我想到的。 –
相關的問題,我發現:(http://stackoverflow.com/questions/16573108/single-django-app-using-two-databases)但是,我需要的**什麼就寫在** models.py的** **範例,** settings.py **和其他需要編寫的文件 – smitkpatel
將它們存儲在單獨文件中的原因是什麼?你知道的[使用多個數據庫的侷限性(https://docs.djangoproject.com/en/1.8/topics/db/multi-db/#limitations-of-multiple-databases)? –
我知道這一點。我真正想要做的是創建檔案文件。就像我在每個月末在我的程序中生成報告時一樣,我希望將表數據存儲在單獨的文件中,以便在將數據寫入文件時出現某種損壞。我不會放棄舊的。將所有內容保存到一個文件會使其變得龐大且易受攻擊 – smitkpatel