Mysql 不允许为多个模型创建对象
我正在进行数据库迁移,需要确保(暂时)没有为某些表创建新项 我将如何执行以下操作:Mysql 不允许为多个模型创建对象,mysql,django,django-models,Mysql,Django,Django Models,我正在进行数据库迁移,需要确保(暂时)没有为某些表创建新项 我将如何执行以下操作: class Table1: ... def save(self, *args, **kwargs): if not self.pk: raise super(Table1, self).save(*args, **kwargs) 对这五个表执行上述模式: - Table1 - Table2 - Table3 - Table4 - T
class Table1:
...
def save(self, *args, **kwargs):
if not self.pk:
raise
super(Table1, self).save(*args, **kwargs)
对这五个表执行上述模式:
- Table1
- Table2
- Table3
- Table4
- Table5
我可以在信号或其他东西中定义它以便更容易添加/删除吗?是的,您可以使用信号。例如:
from django.db.models.signals import pre_delete, pre_save
def block_writes(sender, **kwargs):
if sender in (Table1, Table2, Table3, Table4, Table5):
raise Exception("Writes blocked for these tables right now")
# To start blocking
pre_delete.connect(block_writes)
pre_save.connect(block_writes)
# To stop
pre_delete.disconnect(block_writes)
pre_save.disconnect(block_writes)
但这不会停止所有写入操作,也不能停止,因为它们并不都发送信号。例如,Model.objects.update()
和原始SQL查询将继续工作。我肯定还有其他写路径我也错过了
此外,如果您只是在迁移过程编辑表时尝试停止web服务器进程的写入,则可以使用表锁。如果您使用的是MySQL,那么中有一个上下文管理器,用于在模型的表中处理这些内容