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

前言

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

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

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

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

Django Models遇到的问题

通常情况下,我们是通过

1 2python manage.py makemigrations 3python manage.py migrate

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

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

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

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

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

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

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

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

根据已有表反向生成models

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

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

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

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

示例:根据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,但是我们总不能每次都复制粘贴吧?

所以我们还需要一个命令。

1 2python manage.py inspectdb [表名] > app_name/models.py 3# 还是同理,表名不写就是所有表,写了就是单独表

示例

python manage.py inspectdb web_student > web/models.py

执行结果

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

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

反向生成的models解读

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

关于时间字段问题

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

反向生成的models

默认生成的需要有点问题,在使用时会发现添加时间和更新时间不起作用!!!

需要加上一个参数auto_xxx

1 2create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") 3update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")

这样写就会自动更新了。

总结

本次主要讲述的是根据Mysql反向生成Django models

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

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

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

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

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

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

往期精彩文章推荐:

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

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )