环境描述:
Django default 数据库用的 mysql,现在一个功能需要查询 oracle 数据库中的一些存量表。(不是用 django 模型建立的,其他系统的存量表。此处只是查询这些表。)
现象和过程:
现在进行单元测试的时候发现,加了--keep 的情况下,mysql 没问题,但是 oracle 会打印:
Creating test user...
在 oracle 中,真的发现新建了一个 test_XXX 的用户
网上搜了一圈,看到有文章说在 oracle 数据库连接配置中,加入:
'TEST': {
"USER": "原用户名",
}
这样试了以后,测试是跑起来了,但是该连接用户的密码却被改了...
应该是单元测试新建用户的时候,发现系统中有同名用户,就直接把密码改了
于是我继续把 PASSWORD 也加进去,这样能跑起来了。但是该用户下,多了一张 django_migrations 表。
'TEST': {
"USER": "原用户名",
"USER": "原用户密码",
}
问题:
此处我只想用单元测试去查询这些 oracle 的表,很多情况下配的 oracle 的用户只有查询权限。
这种情况下我这样配置有没有问题。还是应该写成其他的样子?
单元测试时如何不在 oracle 上生成 django_migrations 表?
这块我搜了好久,没找到有效答案。麻烦各位。多谢。
1
Cooky 2021-04-02 15:09:21 +08:00 via Android
配俩数据库,把 Django 自己的那部分放 SQLite 里,搜一下就有
|
2
Vegetable 2021-04-02 15:15:36 +08:00
关于 migrations 的问题,你可以试一下这个。
https://docs.djangoproject.com/zh-hans/3.1/topics/db/multi-db/#allow_migrate 我面临这种测试需要依赖存量数据的情况时,并没有让测试代码去连接去访问只读数据库,而是 copy 了一份旧数据当作测试数据,放到同一个数据库了,并编写一个专门的 db router,将测试代码指向这些数据。主要是我本地测试也连不到那个线上数据库,避免了一些麻烦事 |
3
piaochen0 OP @Cooky 现在就是配的两个数据库,default 配置的就是 mysql 的,mysql 里面本身就有 django 自带的表。现在是 oracle 里面莫名其妙多了一个 django_migrations 表,内容也和 mysql 里面的一样。
|
4
Vegetable 2021-04-02 15:18:51 +08:00
哦对,因为 django 自动创建测试数据库,我还得在 setup 里边执行一个导入 sql,先这些数据表初始化。测试的时候只用了一个 sqlite 。
|