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

摘要:
1背景1.8 Django的应用程序目录中有一个makemigrations文件夹。此文件夹中的文件被错误删除,后来从其他计算机的项目目录中复制。

1 背景

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

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

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

image

1.1 数据库表如下

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

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

免责声明:文章转载自《【服务后端】MySQL数据库与Django Models不一致问题解决》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇selenium+Python中的面试总结数据库空间不足造成插入数据库时提示“因为文件组primary已满,未能为数据库XX对象XX分配空间”下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Solr与MySQL查询性能对比

测试环境 本文简单对比下Solr与MySQL的查询性能速度。 测试数据量:10407608     Num Docs: 10407608 普通查询 这里对MySQL的查询时间都包含了从MySQL Server获取数据的时间。 在项目中一个最常用的查询,查询某段时间内的数据,SQL查询获取数据,30s左右 SELECT * FROM `tf_hotspotd...

详细分析MySQL的日志(一)

官方手册:https://dev.mysql.com/doc/refman/5.7/en/server-logs.html 不管是哪个数据库产品,一定会有日志文件。在MariaDB/MySQL中,主要有5种日志文件: 1.错误日志(error log):记录mysql服务的启停时正确和错误的信息,还记录启动、停止、运行过程中的错误信息。 2.查询日志(ge...

MySQL导入utf8编码的CSV文件

首先,作为测试,我们在这里创建一个名为testdb的数据库,和一个名为test_table的表: create database if not exists testdb default charset utf8 collate utf8_general_ci; use testdb; drop table if exists test_table; cr...

Linux下安装mysql

Linux下安装mysql1.下载安装包 到mysql官网下载mysql编译好的二进制安装包,在下载页面Select Platform:选项选择linux-generic,然后把页面拉到底部,64位系统下载Linux - Generic (glibc 2.5) (x86, 64-bit),32位系统下载Linux - Generic (glibc 2.5)...

mysql中时间比较的实现

MySql中时间比较的实现 unix_timestamp() unix_timestamp 函数可以接受一个参数,也可以不使用参数。 它的返回值是一个无符号的整数。不使用参数,它返回自1970年1月1日0时0分0秒到现在所经过的秒数, 如果 使用参数,参数的类型为时间类型或者时间类型的字符串表示,则是从1970-01-01 00:00:00到指定时间所经历...

MyBatis(三)全局配置文件 之 databaseProvider 数据库厂商标识

databaseIdProvider环境一、databaseIdProvider 属性 MyBatis可以根据不同的数据库厂商执行不同的语句 <databaseIdProvider type="DB_VENDOR"> <!-- 为不同的数据库厂商起别名 --> <property name="M...