django-admin dbshell CommandError: похоже, у вас не установлена ​​программа sqlite3 или она не находится на вашем пути

Я использую две базы данных sqlite в своем проекте django. Один для default и другой для customer_data.

Это мои настройки.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',]

Это мой routers.py

class CustomerRouter: """ Маршрутизатор для управления всеми операциями базы данных над моделями в приложении аутентификации. """ def db_for_read(self, model, **hints): """ Попытки чтения моделей аутентификации направляются в auth_db. """ если model._meta.app_label == 'customer': вернуть 'customer_data' вернуть 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

person Khant Htet Naing    schedule 23.02.2018    source источник
comment
Ошибка говорит, что у вас не установлена ​​программа sqlite3. Итак, вы уже пробовали установить его?   -  person Alasdair    schedule 23.02.2018
comment
Я думал, что Sqlite поставляется с django по умолчанию. Нужно ли устанавливать еще один, потому что я использую две базы данных sqlite?   -  person Khant Htet Naing    schedule 23.02.2018
comment
Python поставляется с модулем sqlite3, поэтому вам не нужно ничего устанавливать, чтобы использовать серверную часть базы данных django.db.backends.sqlite3. Однако команда dbshell пытается использовать интерфейс командной строки sqlite3, который, похоже, у вас не установлен. Обычно он устанавливается на Linux/Mac, так что, я думаю, у вас Windows. Каждая база данных sqlite3 находится в отдельном файле. Вам нужно только один раз установить sqlite3 CLI.   -  person Alasdair    schedule 23.02.2018
comment
Спасибо. Я использую линукс. Теперь я только что установил sqlite3 и запустил его ››.database показывает только customer_data.db. Мне было интересно, где моя база данных по умолчанию?   -  person Khant Htet Naing    schedule 23.02.2018
comment
Это отдельный вопрос на самом деле. Django должен создать базу данных по умолчанию в 'db.sqlite3' (из-за вашей настройки DATABASES['default']['name']) при запуске миграции. Если этого не происходит, возможно, проблема в вашем роутере. Например, похоже, что ваш маршрутизатор никогда не вернет True для базы данных по умолчанию.   -  person Alasdair    schedule 23.02.2018
comment
Действительно спасибо. Я пишу routers.py, показанный выше, только для файла custmer_data. Мне тоже писать по умолчанию?   -  person Khant Htet Naing    schedule 23.02.2018
comment
Мы ушли от темы, это совсем другой вопрос.   -  person Alasdair    schedule 24.02.2018
comment
Спасибо вам в любом случае.   -  person Khant Htet Naing    schedule 24.02.2018


Ответы (1)


Как следует из сообщения об ошибке You appear not to have the 'sqlite3' program installed, вам необходимо установить sqlite3 cli, чтобы использовать команду dbshell.

person Alasdair    schedule 24.02.2018