Как я могу использовать локальную БД SQLite3 для тестирования и БД MSSQL для производства в Django?
Итак, у меня есть проект, над которым я сейчас работаю, где мой пользователь DB не имеет возможности создавать и уничтожать базы данных на сервере, где хранится моя производственная база данных. Поэтому я решил попробовать разместить свои тестовые базы данных в базе данных sqlite3, которая поставляется вместе с Django. Я попытался сделать это, о чем, кажется, читал где-то в документации Django, но это не работает и продолжает выдавать мне ошибку:
AttributeError: объект 'PosixPath' не имеет атрибута 'startswith'
Код:
DATABASES = {
# C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA
'default': {
'ENGINE': 'engine',
'NAME': 'db',
'HOST': '1.1.1.1',
'PORT': '1',
'USER': 'username',
'PASSWORD': 'password',
'OPTIONS': {
'driver': 'driver',
'connection_timeout': 15
},
'TEST': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'testdb.sqlite3',
'HOST': 'localhost'
}
},
}
Я чувствую, что я близок к этому, поэтому я попробовал удалить BASE_DIR и просто использовать имя файла, но это все еще посылает мне сообщения о том, что пользователь не имеет возможности создавать БД в master, что означает, что он все еще подключается к тому же самому серверу PRODUCTION.
Лучшим вариантом является использование всегда одной и той же базы данных для тестирования и для производства, чтобы иметь непрерывность с ней.
Вы можете создать базу данных вручную и использовать опцию --keepdb, чтобы избежать создания/уничтожения базы данных при каждом запуске теста.
python manage.py test --keepdb
Кроме этого конфига, вы также должны создать маршрутизацию базы данных, чтобы направлять запросы в нужную БД.
Ps: хост не требуется
Вот документ: https://docs.djangoproject.com/en/3.2/topics/db/multi-db/#database-routers