• 【服务后端】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=[('u5e7cu7a1au56ed', 'u5e7cu7a1au56ed'), ('u5b66u524du73ed', 'u5b66u524du73ed'), ('u5c0fu5b66', 'u5c0fu5b66'), ('u521du4e2d', 'u521du4e2d'), ('u9ad8u4e2d', 'u9ad8u4e2d')])),
                ],
                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

    好记性不如烂笔头
  • 相关阅读:
    2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571 按顺序等距排列平行直线
    2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571GS标记子实体
    2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571获取和修改摘要信息
    2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571长事务
    2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571按表走呵呵!(延时死循环)
    2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571修改多段线的凸度
    2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571临时反应器的简单应用
    2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571自创实体类从AcDbCurve派生,实现一些类方法并动态绘制
    2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571多段线动态切割闭合区域
    动态块
  • 原文地址:https://www.cnblogs.com/inns/p/5497238.html
Copyright © 2020-2023  润新知