Django根据已有数据库表生成模型

django根据已有的数据库表创建对应的模型

setting.py文件中配置默认连接的数据

DATABASES = {
    #'default': {
    #    'ENGINE': 'django.db.backends.sqlite3',
    #    'NAME': BASE_DIR / 'db.sqlite3',
    #}
    "default" : {
        "ENGINE":"django.db.backends.mysql",
        "HOST":"127.0.0.1",
        "POST":"3306",
        "USER":"root",
        "PASSWORD":"root",
        "NAME":"dbname",
        "OPTIONS": {
            # 取消外键约束
            "init_command":"SET foreign_key_checks = 0;"
        }
    }
}

命令生成模型代码

根据数据库已有的表生成模型,打开终端命令行,进入项目根目录下,输入以下命令

python manage.py inspectdb 表名

这个命令是生成单个模型,不加表名会将数据库中所有表都生成模型。生成模型后一般会结合下面这个命令使用:
将生成的模型导入指定文件,通常是某个程序目录下的models.py文件

python manage.py inspectdb > [app名]/models.py

打开对应的模型文件就可以看到,模型代码已经生成了。在每个模型的元类中,会有一个managed变量

……
	class Meta:
		managed = False
……

如果以后需要对模型做修改,就需要将这一行代码注释掉或者将该变量值改为True
然后就是正常的数据迁移

扩展:将数据库中手动添加的某个表或视图生成模型文件
我们本身是有models.py文件,并且里面也有我们已经在使用的模型。这个时候数据库表生成的模型就不要直接导入到models.py文件中。先导到一个额外的临时文件中再复制过去

python manage.py inspectdb 表名 > app名/临时文件名

临时文件可以不用事先创建,这个命令可以自己创建,当上述命令执行完毕后,打开临时文件,把里面的模型代码复制到models.py文件中即可。也可以不用复制,要用的时候按实际的路径import就可以

django数据迁移

每当我们django项目中的模型修改时,都需要将修改后的结构同步数据库表,通常使用以下两个命令
打开终端命令行,进入项目根目录下,输入以下命令:

python manage.py makemigrations app名

上述命令会生成一个模型修改记录文件,存放于app目录下的migrations目录下
然后才是迁移(数据库表的修改)

python manage.py migrate

回滚迁移

当我们已经完成一次或多次数据迁移后,又突然想要回溯到历史某次迁移时就可以使用迁移回滚。具体步骤如下:

  • 在模型所对应的应用目录下migrations目录中找到自己想要要的迁移文件。(文件中可以查看到每次迁移都做了什么,根据内容自己找就可以)
  • 此步骤与上一步骤作用一样,二选一。在终端命令中输入python manage.py showmigrations app名,查看该应用已经执行过那些迁移,命令会打印所有执行过的迁移文件名
  • 版本回滚,命令:
python manage.py migrate app名 迁移文件名前面的数字版本号 

注意:迁移回滚到指定的版本后,该版本以后的其他所有迁移都将消失。举个例子,我现在有100个迁移文件,当前是已经执行完0099_xxxx.py迁移文件内容的,现在我突然回滚到0050_xxx.py。那么0051到0099中记录的所有对模型的修改都将不存在了。所以版本回滚慎用

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值