相关疑难解决方法(0)

Django TestCase不在辅助数据库上使用事务

我正在使用Django 1.3.1.我有两个数据库,我的一些模型存在于一个数据库中,一些存在于另一个数据库中.这两个数据库都是contrib.gis.db.backends.postgis数据库.

令我惊讶的是,Django的TestCase并没有回滚我在测试之间在辅助数据库中所做的更改.

在下面的代码中,myproject.models.WellOwner是一个非常简单的模型,基本上只有一个字段"name".路由器说它应该在辅助数据库中.第一次测试中的断言成功,第二次测试失败:

from django.test import TestCase
from myproject.models import WellOwner

class SimpleTest(TestCase):
    def test1(self):
        WellOwner.objects.create(name="Remco")
        self.assertEquals(1, WellOwner.objects.count())  # Succeeds

class SimpleTest2(TestCase):
    def test2(self):
        # I would expect to have an empty database at this point
        self.assertEquals(0, WellOwner.objects.count())  # Fails!
Run Code Online (Sandbox Code Playgroud)

我假设Django将此包装在默认数据库的事务中,但不包含在辅助数据库上.这是一个已知的问题吗?有修复吗?也许在1.4?我的Google-fu失败了.

(如果我在设置中将DATABASE_ROUTERS更改为[],以便所有内容都进入同一个数据库,问题就会消失)

我将添加路由器的整个代码,以防它有用:

SECONDARY_MODELS = ('WellOwner', ...)

import logging
logger = logging.getLogger(__name__)


class GmdbRouter(object):
    """Keep some models in a secondary database."""

    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'gmdb':
            if model._meta.object_name in SECONDARY_MODELS:
                return 'secondary'

        return None

    def db_for_write(self, …
Run Code Online (Sandbox Code Playgroud)

python django multiple-databases

7
推荐指数
1
解决办法
794
查看次数

标签 统计

django ×1

multiple-databases ×1

python ×1