我有一个项目在Django中运行,并通过sessionmaker连接do SQLAlchemy ORM,如下所示。它基本上使用指定的API(GET,POST,DELETE)处理http方法,并返回,发布,更新或删除数据库条目。
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',
。
我想通过简单地遍历所有可能需要测试的方法和URI来测试API是否按预期工作。测试是使用Django的TestCase
类及其Client
模块完成的。效果很好。
我的问题: 它正在更改(特别是删除和更新其中的实际数据库中的列)。与其使用“创建并销毁的test_db”作为Django的测试输出,可能表明它使用的是真正的数据库。
我有点明白为什么(我用SQLAlchemy连接绕过了Django的内置数据库连接),但是我对如何解决此问题感兴趣,即使用真正的test_db。
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而引起的。