Django--migrate失败:relation "user" already exists

migrate失败

错误如下:

django.db.utils.ProgrammingError: relation "user" already exists

解决方式:

python3 manage.py migrate mfxx (migrations文件) --fake-initial

关于fake和fake-initial参数 以及其他的一些migrate可选用参数

  • –fake
    • migrate命令的–fake参数在官方文档中的解释是,记录或消除migrate记录,但不去真的运行SQL以改变数据结构。
    • 换句话说,一般的migrate的流程是
      • 1.读取migrations文件,解析成SQL;
      • 2.执行SQL改变数据库结构或内容;
      • 3.将本次migrate的信息录入django_migrations。
      • 但是如果加上–fake参数,那么第2步会被直接跳过而变更直接被记录到django_migrations中。
    • 这个参数的使用场景常常是这样的: 当一个migration文件执行出错,而我们明确知道这个错该如何修正,我们完全可以手动去对数据库结构做一些修改。然后再带–fake参数地运行本次变更对应的migration文件。“假装”我们正确地做了一次migrate。
  • –fake-initial
    • –fake-initial的原理是类似的,只不过其针对的只是执行0001_initial这个文件。所以说fake-initial的使用场景更加狭窄,即上面所说的对于数据库中有结构,但是0001_initial.py重新生成并且需要写入django_migrations记录时,用到这个参数。
  • sqlmigrate
    • 另外migrate还有一个比较有用的参数是sqlmigrate。其用法是sqlmigrate app 000x_xxx。它的意思是将某个特定的migrations文件翻译成SQL打印到屏幕上。我们手动去执行这些SQL效果和自动去migrate的效果是一样的。因此在自动migrate时出错的时候,可以利用sqlmigrate打印出SQL,具体查看哪些SQL有问题。如果可以排除,那么可以手动修改出错的SQL并执行,再带有–fake参数执行下这个migrate即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值