在MariaDB中设置sql_safe_update模式时,逆转django迁移时出错

r6hnlfcb  于 2023-10-20  发布在  Go
关注(0)|答案(1)|浏览(102)

当我尝试在Django中反向迁移其中一个迁移时,由于MariaDB中设置了sql_safe_update模式,我遇到了问题。
它为reverse运行的确切SQL语句是:

ALTER TABLE `user` DROP COLUMN `pin_code`;

我从Django得到的错误是:

MySQLdb.OperationalError: (1175, 'You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column')

现在我的数据库处于不一致的状态,因为该列已被删除,并且由于事务中没有运行MySQL的SQL语句,失败的迁移没有回滚。即使用--fake,它也会显示同样的错误。
有没有办法告诉django只在迁移期间使用sql_safe_update=0运行迁移?请注意,我不能全局关闭sql_safe_update,因为数据库管理员坚持不全局删除它。
另外,为什么DROP列需要一个WHERE语句也不完全清楚?

kzmpq1sx

kzmpq1sx1#

我进一步做了一些调试,发现它不会在ALTER TABLE语句上失败,而是在以下语句上失败:

DELETE FROM `django_migrations` WHERE (`django_migrations`.`app` = 'cards' AND `django_migrations`.`name` = '0023_user_pin_code');

这是django中的一个问题,因为在没有关键列上的WHERE子句的情况下运行django语句。这个名字没有索引,这就是为什么这个问题突然出现。
让我在Django为同样的事情开一张罚单。

相关问题