如果使用Django-tenat-schemas如何刷新数据库?

时间:2016-12-08 05:57:29

标签: python django

我正在使用django-tenant-schemas app来处理与各种租户相关的租户和数据库。现在我想要做的是刷新所有数据库,以便如何做到这一点?

2 个答案:

答案 0 :(得分:1)

我正在使用https://github.com/tomturner/django-tenants,但这也适用于https://github.com/bernardopires/django-tenant-schemas

使用多个租户/模式时,flush不再起作用。使用manage.py flush时,错误会告诉您存在未满足的外键约束;它暗示:

HINT:  Truncate table "<your table name>" at the same time, or use TRUNCATE ... CASCADE.

这是一个管理命令(flush_cascade.py),它可以做到这一点(我只用PostgreSQL测试过):

from django.core.management import call_command
from django.core.management.commands.flush import Command as FlushCommand
from django.db import transaction

class Command(FlushCommand):    
    @transaction.atomic
    def handle(self, *args, **options):
        options['allow_cascade'] = True
        call_command('flush', *args, **options)

Django的默认flush命令只将TRUNCATE发送到数据库。它不会添加CASCADE,因为并非所有数据库后端都支持级联语句。

答案 1 :(得分:0)

您可以使用tenant_command包装器在每个架构的基础上使用任何django命令,如果要迭代所有架构,则必须创建一个迭代所有租户的自定义命令

./manage.py tenant_command flush --schema=customer1

来源:http://django-tenant-schemas.readthedocs.io/en/latest/use.html#tenant-command