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中记录的所有对模型的修改都将不存在了。所以版本回滚慎用