【服务后端】MySQL数据库与Django Models不一致问题解决

1 背景

1.8 Django的APP目录下有makemigrations文件夹,这个文件夹中的文件误删除过,后面从其他电脑的工程目录中拷贝了过来。

进行了python manage.py makemigrations和python manage.py migrate操作。

由于前后的makemigrations的文件不一致,导致数据库中的字段与Django的Models字段不一致,访问时报错

image

 

1.1 数据库表如下

 

1.2 Django的Models中如下

class Class(JsonMode):
    #idClass = models.AutoField(primary_key=True)
    ClassNumber = models.CharField(max_length=3)
    ClassName = models.CharField(max_length=20,default='')
    GenerateYear = models.DateTimeField(default=None)
    GrandType = ((u'幼稚园',u'幼稚园'),(u'学前班',u'学前班'),(u'小学',u'小学'),(u'初中',u'初中'),(u'高中',u'高中'))
    Type = models.CharField(choices=GrandType,max_length=3)
    idSchool = models.ForeignKey(School,related_name='fkClass2School')
    CreatedUser = models.ForeignKey(User,related_name='fkClassCreatedUser2User')
    Owner = models.ForeignKey(User,related_name='fkClassOwner2User')
    _FILE_HeaderFigure = models.CharField(max_length=300,default='')

 

2.问题分析

2.1 0001_initial.py

查看makemigrations文件init.py文件的Class表,发现初始化时,ClassName字段已经存在,可能备份PC和当前PC的数据库构造时间不一样。

migrations.CreateModel(
            name='Class',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('IsDelete', models.BooleanField(default=False)),
                ('CreateTime', models.DateTimeField(auto_now_add=True, null=True)),
                ('ModifyTime', models.DateTimeField(auto_now=True, null=True)),
                ('ClassNumber', models.CharField(max_length=3)),
               ('ClassName', models.CharField(default=b'', max_length=20)),
                ('GenerateYear', models.DateTimeField(default=None)),
                ('Type', models.CharField(max_length=3, choices=[('\u5e7c\u7a1a\u56ed', '\u5e7c\u7a1a\u56ed'), ('\u5b66\u524d\u73ed', '\u5b66\u524d\u73ed'), ('\u5c0f\u5b66', '\u5c0f\u5b66'), ('\u521d\u4e2d', '\u521d\u4e2d'), ('\u9ad8\u4e2d', '\u9ad8\u4e2d')])),
            ],
            options={
                'abstract': False,
            },

2.2 0002_auto_20160409_1254.py

初始化文件之外的更新文件

其他文件 中也已经有AddFiled字段将 CreatedUser 等字段添加到表里面,所以差异化分析时了解MySQL数据库中这些字段已经存在

migrations.AddField(
    model_name='class',
    name='CreatedUser',
    field=models.ForeignKey(related_name='fkClassCreatedUser2User', to='School.User'),
),

 

3 尝试解决

删除这些同步记录,保持makemigrations与mysql中字段一致,再重新同步一下

image

 

数据同步成功之后,访问正常

image

转载于:https://www.cnblogs.com/inns/p/5497238.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个开源的Python Web框架,它提供了丰富的功能和工具,用于快速开发高效的Web应用程序。Django的源码是用Python编写的,整个框架的核心功能是基于一系列的Python模块和库实现的。其中与MySQL数据库相关的源码主要包括以下几个方面的内容。 首先,Django提供了一个名为"django.db.backends.mysql"的模块,该模块是实现与MySQL数据库交互的后端。在该模块中,包含了许多与数据库连接、数据查询和事务处理相关的类和函数的实现。通过这个模块,Django可以使用MySQL作为后端数据库来存储和操作数据。 其次,在"Django/db/models"目录下的模块中,也有一些与MySQL相关的源码。在这些模块中定义了一些特殊字段,如"django.db.models.IntegerField"、"django.db.models.DateTimeField"等,这些字段可以用于在MySQL数据库表中创建相应的列,并提供了与MySQL数据库的数据类型映射。 另外,在"Django/db/backends/mysql"目录中,还有一些实现MySQL数据库特定功能的源码。比如,"base.py"中定义了一些与MySQL连接、查询和事务相关的基本类和函数;"creation.py"中提供了创建MySQL数据库表的方法;"operations.py"中定义了一些执行与MySQL数据库相关的操作的方法。 最后,在"Django/db/models/sql/compiler.py"和"Django/db/models/sql/query.py"等文件中,还有一些与MySQL数据库查询语句的生成和执行相关的源码。这些源码通过封装MySQL数据库的原生查询语句,提供了更方便、高效的方式来进行数据库查询。 总的来说,Django的源码中包含了许多与MySQL数据库交互的功能实现。通过这些源码,Django可以通过PythonMySQL数据库进行连接、查询和操作数据,并提供了方便、高效的API接口供开发者使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值