这篇文章主要介绍Django迁移报错怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
前言
在讲解如何解决<代码> 代码>报迁移错原因前,我们先要了解<代码> 代码>迁移做了什么事情,<代码> 代码>:迁移将新生成的迁移脚本。映射到数据库中。创建新的表或者修改表的结构。
问题1:迁移怎么判断哪些迁移脚本需要执行吗?
它会将代码中的迁移脚本和数据库中<代码> django_migrations> 代码中的迁移脚本进行对比,如果发现数据库中,没有这个迁移脚本,那么就会执行这个迁移脚本。
问题2:迁移做了什么事情
- <李>
将相关的迁移脚本翻译成SQL语句,在数据库中执行这个SQL语句。
李> <李>如果这个SQL语句执行没有问题,那么就会将这个迁移脚本的名字记录到<代码> django_migrations> 代码中。
李>实战案例
当我们了解清楚<代码> >代码迁移的作用后,我们来看一个案例
首先我们创建一个项目<代码> orm_migrations_demo> 代码,接着创建2个应用程序应用前面<代码> 代码>和<代码> 代码>,代码结构如下图
#, front.models.py class 文章(models.Model): ,,,name =, models.CharField (max_length=200) #,article.models.py class FrontUser (models.Model): ,,,name =, models.CharField (max_length=200)
接着在<代码>设置。py 代码>的<代码> INSTALL_APPS> 代码中将应用注册
INSTALLED_APPS =, ( ,,,& # 39;django.contrib.admin& # 39; ,,,& # 39;django.contrib.auth& # 39; ,,,& # 39;django.contrib.contenttypes& # 39; ,,,& # 39;django.contrib.sessions& # 39; ,,,& # 39;django.contrib.messages& # 39; ,,,& # 39;django.contrib.staticfiles& # 39; ,,,& # 39;前# 39; ,,,& # 39;文章# 39; )
接着我们打开命令行,输入<代码> makemigrations文章> 代码,再输入<代码> makemigrations面前> 代码,此时2个应用目录中都会出现迁移文件_initial <代码> 0001。py> 代码,此时数据库中是没有表的,因为还没有执行迁移命令
接着我们执行<代码> 代码>条迁移,再输入<代码> 代码>面前,迁移迁移发现数据库中没有迁移脚本,那么就会执行刚才生成的2个迁移脚本,将迁移脚本翻译成SQL语句,然后创建了2张表,执行完成后,会将迁移脚本记录到<代码> django_migrations 代码>表中,数据库中表结构如下:
<代码> django_migrations 代码>表中内容如下:
class 文章(models.Model): ,,,name =, models.CharField (max_length=200) ,,,content =, models.CharField (max_length=200,, null=True)
然后执行命令<代码> makemigrations文章> 代码,会在项目中生成迁移文件_article_content <代码> 0002。py> 代码,接着执行<代码> 代码>条迁移,执行迁移脚本,此时数据库中表<代码> django_migrations> 代码有3个迁移脚本
class 迁移(migrations.Migration): ,,,dependencies =, ( ,,,,,,,(& # 39;文章# 39;,,& # 39;_initial& # 39; 0001), ,,,) ,,,operations =, ( ,,,,,,,migrations.AddField ( ,,,,,,,,,,,model_name=& # 39;文章# 39; ,,,,,,,,,,,的名字=& # 39;内容# 39; ,,,,,,,,,,,字段=models.CharField (max_length=200,, null=True), ,,,,,,,), null