使用test db通过SQLAlchemy ORM进行Django的内置测试

时间:2019-11-07 15:19:18

标签: python mysql django database sqlalchemy

我有一个项目在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。

  • 当前,我正在使用只读的mysql-user进行测试,但这使我无法测试实际的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而引起的。

0 个答案:

没有答案