使用一个带有Django多个数据库的DB执行所有写入操作

时间:2012-02-06 08:44:40

标签: database django multiple-databases

在我的django应用程序中,我有一个使用这种方法的模型:

def deleteItem(self, item, pt):
        if pt == 'product':
            i = self.vcartitem_set.filter(product__id=item)
        elif pt == 'brand':
            i = self.vcartbrand_set.filter(brand__id=item)
        else:
            return u'Wrong product type'
        i.delete()
        return 'OK'

我有2个数据库,'默认'和'奴隶'。 Slave是只读的,所以当使用'slave'数据库执行 self.vcartitem_set.filter(product__id = item)时,我在 i.delete()上有错误。我可以通过写 i.delete(使用='默认')来绕过这个,但是我必须为每个模型编写它。有没有办法告诉django使用'default'DB执行所有写操作,即使先前使用'slave'DB检索了对象?

1 个答案:

答案 0 :(得分:0)

您可以使用数据库路由器执行此操作:
https://docs.djangoproject.com/en/dev/topics/db/multi-db/#automatic-database-routing

您只需要创建一个路由器模型并定义db_for_read和db_for_write函数,将DATABASE_ROUTERS添加到您的settings.py中它就可以了。