一篇文章教会你使用Django根据现有数据库反向生成models 3年前

前言

Hey,大家好呀,我是码农,星期八!熟悉Django的都知道,Django真是个好东西。

复制粘贴一把梭很快都能撸出来一个web,再借助Django的Models和ORM。

查询简直不要太方便!!!

但是,但是,但是,真的如此吗???

Django Models遇到的问题

通常情况下,我们是通过

python manage.py makemigrations
python manage.py migrate

这两条命令在数据库中帮助我们(迁移数据库)创建表的。

但是我如果我们的表经常修改,会在每个app的migrations下创建大量日志。

一篇文章教会你使用Django根据现有数据库反向生成models

如果修改models.py的次数足够多,你还会发现在迁移时各种报错!!!

反正就是,不是驴不蹬,就是磨不转。。。这个场景不好复原,就不放截图了。

还有一种场景是,你去一个公司了,或者你已经创建一个表了,反正就是已经有表了。

不需要再通过Django去生成了。

这种情况咋办???给同事说说删了用Django生成???,里面十万条数据呢,开什么玩笑!

所以,这时候也需要有一个工具能通过现有的表生成Django对应的models

根据已有表反向生成models

一篇文章教会你使用Django根据现有数据库反向生成models

其实再执行迁移命令时,除了自己的表,还会像auth.xxdjango.xx开头的表。

这类表主要是的作用主要是为django admin提供服务和django session提供服务。

反向生成django models,用到的命令主要是

python manage.py inspectdb [表名]
# 不写表名默认生成所有表

示例:根据web_student表反向生成

命令:

python manage.py inspectdb web_studen

执行结果

一篇文章教会你使用Django根据现有数据库反向生成models

可以复制第二个红框的内容到app下的models.py中。

一篇文章教会你使用Django根据现有数据库反向生成models

注: 生成的没有verbose_name等其他参数,需要手动添加。

示例:生成所有表

python manage.py inspectdb

执行结果

一篇文章教会你使用Django根据现有数据库反向生成models

不加表名会将当前数据库下所有的表都反向生成。

下面还有很多,截图截不了,然后将生成的代码复制到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

执行结果

一篇文章教会你使用Django根据现有数据库反向生成models

生成就直接写入到了文件。

注意:这条命令会把文件清空,不会进行追加

反向生成的models解读

一篇文章教会你使用Django根据现有数据库反向生成models

字段名db_table不可修改,model名随便修改。

关于时间字段问题

通常情况下,我们会有一个create_timeupdate_time

一篇文章教会你使用Django根据现有数据库反向生成models

反向生成的models

一篇文章教会你使用Django根据现有数据库反向生成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

主要关键字是inspectdbinspectdb后面需要跟表名,不跟表名反向生成所有。

值得注意的是时间问题,如果需要自动创建时间和更新时间记得添加auto_xx参数。

我是码农星期八,如果觉得还不错,记得动手点赞一下哈。感谢你的观看。

如果你觉得文章还可以,记得点赞留言支持我们哈。感谢你的阅读,有问题请记得在下方留言噢~

想学习更多关于Python的知识,可以参考学习网址:http://pdcfighting.com/,点击阅读原文,可以直达噢~

**-----**------**-----**---**** End **-----**--------**-----**-****

往期精彩文章推荐:

一篇文章教会你使用Django根据现有数据库反向生成models

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/m1rZgQqMvQ4zgXe-w6PZjg,如有侵权,请联系删除。

℡靜.儀式.‘
自童年起,我便独自一人,照顾着历代星辰。
5
发布数
0
关注者
2225
累计阅读

热门教程文档

Spring Cloud
8小节
Java
12小节
CSS
33小节
Javascript
24小节
Objective-C
29小节