Django根据现有数据库反向生成models

本文介绍了如何使用Django的inspectdb命令从现有数据库中反向生成models,避免频繁迁移导致的问题。当数据库表已存在或需要直接对应数据库时,此方法尤其有用。通过`python manage.py inspectdb [表名]`,可以轻松获取models代码,并可直接写入models.py文件。需要注意的是,时间字段需要添加`auto_now_add`和`auto_now`参数以实现自动更新。此外,文章还提醒了命令会清空目标文件,而不是追加内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.xxdjango.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_timeupdate_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

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

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

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。

敬往事一杯酒,自此不再回头。

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

感谢你的观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值