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