Django根据现有数据库反向生成models
前言
Hey,大家好呀,我是码农,星期八!,熟悉Django的都知道,Django真是个好东西。
复制粘贴一把梭很快都能撸出来一个web,再借助Django的Models和ORM。
查询简直不要太方便!!!
但是,但是,但是,真的如此吗???
Django Models遇到的问题
通常情况下,我们是通过
python manage.py makemigrations
python manage.py migrate
这两条命令在数据库中**帮助我们(迁移数据库)**创建表的。
但是我如果我们的表经常修改,会在每个app的migrations
下创建大量日志。
如果修改models.py
的次数足够多,你还会发现在迁移时各种报错!!!
反正就是 不是驴不蹬,就是磨不转。。。
这个场景不好复原,就不放截图了。
。。。
还有一种场景是,你去一个公司了,或者你已经创建一个表了,反正就是已经有表了。
不需要再通过Django去生成了。
这种情况咋办???给同事说说删了用Django生成???,里面十万条数据呢,开什么玩笑!
所以,这时候也需要有一个工具能通过现有的表生成Django对应的models。
根据已有表反向生成models
其实再执行迁移命令时,除了自己的表,还会像auth.xx
和django.xx
开头的表。
这类表主要是的作用主要是为django admin
提供服务和django session
提供服务。
反向生成django models
,用到的命令主要是
python manage.py inspectdb [表名]
# 不写表名默认生成所有表
示例:根据web_student表
反向生成
命令
python manage.py inspectdb web_studen
执行结果
可以复制第二个红框的内容到app
下的models.py
中。
**注:**生成的没有verbose_name
等其他参数,需要手动添加。
示例:生成所有表
python manage.py inspectdb
执行结果
不加表名会将当前数据库下所有的表都反向生成。
下面还有很多,截图截不了,然后将生成的代码复制到app/models.py
中就行了。
反向生成models到app中
上述我们虽然根据Mysql
现有的表生成了Django models
,但是我们总不能每次都复制粘贴吧?
所以我们还需要一个命令。
python manage.py inspectdb [表名] > app_name/models.py
# 还是同理,表名不写就是所有表,写了就是单独表
示例
python manage.py inspectdb web_student > web/models.py
执行结果
生成就直接写入到了文件。
注意:这条命令会把文件清空,不会进行追加
反向生成的models解读
字段名
和db_table
不可修改,model名随便修改。
关于时间字段问题
通常情况下,我们会有一个create_time
和update_time
反向生成的models
默认生成的需要有点问题,在使用时会发现添加时间和更新时间不起作用!!!
需要加上一个参数auto_xxx
create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
这样写就会自动更新了。
总结
本次主要讲述的是根据Mysql
反向生成Django models
。
主要关键字是inspectdb
,inspectdb
后面需要跟表名,不跟表名反向生成所有。
值得注意的是时间问题,如果需要自动创建时间和更新时间记得添加auto_xx
参数。
如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。
敬往事一杯酒,自此不再回头。
我是码农星期八,如果觉得还不错,记得动手点赞一下哈。
感谢你的观看。