django新增class的时候数据库格式出错

简介:

这几天开发频繁要求查看生产环境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的时候,就出现了下面的错误:

1.png


我开始认为是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文件,里面是这样的:

image.png


先把里面CharField改成TextField,然后把50000改成小于21845的就行了。或者把这个文件以及之后产生的所有文件都删除掉。重新的去make。


实在不行,还有一个万不得已的办法,几乎所有的数据库错误都可以用这个方法解决:将migrations文件夹下的文件除了__init__.py全部删掉,然后将数据库drop掉,重新建数据库。然后make和migrate,就可以使用一个新的数据库(但愿你永远用不到这个方法)。



最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!

wKioL1l16m3BMYDKAACPHEqd55Q687.jpg




 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/2052559
相关文章
|
5月前
|
数据库
编码与解码--数据库编码格式--后端编码格式
编码与解码--数据库编码格式--后端编码格式
32 0
|
4月前
|
存储 关系型数据库 MySQL
Python Django框架下将MySQL数据库的内容在网页上动态展示(修订版-2021-05-17)
Python Django框架下将MySQL数据库的内容在网页上动态展示(修订版-2021-05-17)
30527 0
|
3月前
|
前端开发 数据库 Python
使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
【1月更文挑战第13天】使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
87 7
|
10天前
|
关系型数据库 API 数据库
Django中的数据库事务管理:确保数据一致性
【4月更文挑战第15天】Django框架提供强大的数据库事务管理,确保ACID属性,保证数据一致性和完整性。文章深入讨论了Django事务管理,包括使用`@transaction.atomic`装饰器和`transaction.atomic()`上下文管理器手动控制事务,以及低级API进行精细管理。注意避免长时间事务、选择合适隔离级别、正确处理异常及了解数据库特性。掌握这些技巧对构建可靠Web应用至关重要。
|
4月前
|
SQL 数据库 开发者
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
|
12天前
|
关系型数据库 MySQL 数据库连接
Django(四):Django项目部署数据库及服务器配置详解(MySQL)
Django(四):Django项目部署数据库及服务器配置详解(MySQL)
39 11
|
1月前
|
存储 SQL 数据库
django如何连接sqlite数据库?
django如何连接sqlite数据库?
45 0
|
5月前
|
SQL 关系型数据库 MySQL
07 Django模型 - ORM简介及MySQL数据库的使用
07 Django模型 - ORM简介及MySQL数据库的使用
36 0
|
6月前
|
缓存 关系型数据库 MySQL
Django操作MySQL数据库的优化方法
Django操作MySQL数据库的优化方法
|
3月前
|
Shell 数据库 Python
简记:使用 Django Shell 清空 数据库表
简记:使用 Django Shell 清空 数据库表
31 0