1

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
8
  • 1
    The error says "You appear not to have the 'sqlite3' program installed". So, have you tried installing it yet? Commented Feb 23, 2018 at 15:04
  • I thought Sqlite come with django default. Do I have to install another one cos I use two sqlite databases? Commented Feb 23, 2018 at 15:10
  • 1
    Python comes with the sqlite3 module, so you don't have to install anything to use the django.db.backends.sqlite3 database backend. However the dbshell command 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. Commented Feb 23, 2018 at 15:21
  • Thanks. I use Linux. Now I just installed sqlite3 and run it >>.database it only shows customer_data.db. I was wondering where is my default database? Commented Feb 23, 2018 at 16:06
  • That's a separate question really. Django should create the default database in 'db.sqlite3' (because of your DATABASES['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 return True for the default db. Commented Feb 23, 2018 at 16:42

1 Answer 1

4

As the error message You appear not to have the 'sqlite3' program installed suggests, you need to install the sqlite3 cli in order to use the dbshell command.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.