У меня есть проект, работающий в Django и подключающийся к SQLAlchemy ORM через sessionmaker, как показано ниже. Он в основном обрабатывает методы http с указанным API (GET, POST, DELETE) и возвращает, публикует, обновляет или удаляет записи в БД.
from sqlalchemy import create_engine
from sqlalchemy.orm.session import sessionmaker
self.session = sessionmaker(
bind=create_engine('mysql+pymysql://user:pw@127.0.0.1/db')
В myproject.settings
Я использую значения по умолчанию, такие как 'ENGINE': 'django.db.backends.sqlite3',
.
Я хотел бы проверить, работает ли API так, как задумано, просто просматривая все возможные методы и URI, которые, по-видимому, необходимы для тестирования. Тестирование выполняется с классом TestCase
Джанго и его модулем Client
. Работает вполне нормально.
Моя проблема : Это изменение (особенно удаление и обновление столбцов внутри) реального БД. Вместо того, чтобы использовать «созданный и уничтоженный test_db» в качестве выходных данных теста Django, это может указывать на то, что он использует настоящий db.
Я понимаю, почему (я обхожу встроенное db-соединение Django с моим соединением SQLAlchemy),но меня интересует , как это исправить, то есть с использованием истинного test_db.
- В настоящее время я использую только для чтения mysql-пользователя для тестирования, но это мешает мнетестирование фактических запросов POST и DELETE.
- Я мог бы попытаться использовать другую базу данных для тестирования путем мошенничества, но я бы предпочел другое решение (мне пришлось бы создавать фиктивную базу данных из реальной, каждый раз, когда я запускалтест)
PS: Если вы считаете, что я не предоставил достаточно кода, дайте мне подсказку. Но я чувствую, что люди могут получить представление о моей проблеме, и решение, вероятно, заключается в интеграции MySQL в Django, что мне еще не нужно было делать должным образом. Или, если быть более точным, я не мог работать каждый раз, когда пытался.
РЕДАКТИРОВАТЬ: При попытке настроить мою базу данных на
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db',
'USER': 'user',
'PASSWORD': 'pw',
'HOST': '127.0.0.1',
}
}
я получаю django.db.utils.OperationalError: (2006, 'SSL connection error: SSL_CTX_set_tmp_dh failed')
, что я из-за того, что я здесь не использую pymysql, я полагаю.