I use two sqlite databases in my django project . One for default and another for customer_data.
This is my settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'customers': {
'NAME': 'customer_data',
'ENGINE': 'django.db.backends.sqlite3',
'USER': 'db2',
'PASSWORD': 'db2password'
}
}
DATABASE_ROUTERS = ['theapp.routers.CustomerRouter',]
This is my routers.py
class CustomerRouter: """ A router to control all database operations on models in the auth application. """ def db_for_read(self, model, **hints): """ Attempts to read auth models go to auth_db. """ if model._meta.app_label == 'customer': return 'customer_data' return None
def db_for_write(self, model, **hints):
"""
Attempts to write auth models go to auth_db.
"""
if model._meta.app_label == 'customer':
return 'customer_data'
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the auth app is involved.
"""
if obj1._meta.app_label == 'customer' or \
obj2._meta.app_label == 'customer':
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Make sure the auth app only appears in the 'auth_db'
database.
"""
if app_label == 'customer':
return db == 'customer_data'
return None
sqlite3module, so you don't have to install anything to use thedjango.db.backends.sqlite3database backend. However thedbshellcommand tries to use the sqlite3 CLI, which doesn't appear to be installed for you. It's normally installed on Linux/Mac, so I guess you're on Windows. Each sqlite3 database is in a separate file. You only need to install the sqlite3 CLI once.'db.sqlite3'(because of yourDATABASES['default']['name']setting) when you run migrate. If that doesn't happen, then perhaps there's a problem with your router. For example it looks like your router will never returnTruefor the default db.