这几天开发频繁要求查看生产环境zookeeper的配置,于是就想在django里添加一个新的栏,以文本的形式,随时更新zookeeper的情况。
于是我就登陆了django,在model.py里添加一个新的class,如下:
1
2
3
4
5
6
7
8
|
#建立杭州测试ZK配置
class HZfunczk(models.Model):
hzfunczk_remark = models.CharField(verbose_name=
'杭州测试ZK配置'
,max_length=50000,blank=
true
)
hzfunczk_signer = models.CharField(verbose_name=
'登记人'
,max_length=30,default=
'system'
)
hzfunczk_signtime = models.DateField(auto_now_add=True)
def __unicode__(self):
return
self.domain_name
|
然后在django的目录下执行#python manage.py makemigrations,这一步没问题,但是在执行#python manage.py migrate的时候,就出现了下面的错误:
我开始认为是charfield写错了,应该写Textfield,于是更改了一下,但是保存之后,再执行#python manage.py migrate还是出错。其实这个错误主要原因就是因为我那个50000设置错了,因为字段hzfunczk_remark定义的长度50000超出了mysql的varchar的最大长度21845(在utf8编码情况下)。于是我就在model.py里把这个长度改成20000,保存之后,还是执行到#python manage.py migrate这一步,依旧爆上面的错误。于是我就干脆把这个class先删除掉,没想到都删除了,还是会爆错。
这就很奇怪了,我已经删掉了为啥还有这样的事儿?于是就干脆进入到数据库去看,由于我现在只知道列名叫hzfunczk_remark,所以我要根据这个列名去查它所在的表,maria反馈如下:
1
2
|
MariaDB [abccs]>
select
TABLE_SCHEMA, TABLE_NAME from information_schema.columns where COLUMN_NAME =
'hzfunczk_remark'
;
Empty
set
(0.02 sec)
|
好尴尬呀,数据库里压根就没有列名为“hzfunczk_remark”的表。然后由于#python manage.py migrate报错,现在无法启动django。遇到这种状况,就去django里的migrations文件夹,这个文件夹里有很多的py文件,它们记录着数据库的每一步操作,不过这里面的py还没有真正执行到数据库里,我找到当时添加class那个时间段的py文件,里面是这样的:
先把里面CharField改成TextField,然后把50000改成小于21845的就行了。或者把这个文件以及之后产生的所有文件都删除掉。重新的去make。
实在不行,还有一个万不得已的办法,几乎所有的数据库错误都可以用这个方法解决:将migrations文件夹下的文件除了__init__.py全部删掉,然后将数据库drop掉,重新建数据库。然后make和migrate,就可以使用一个新的数据库(但愿你永远用不到这个方法)。
最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!