数据库反向生成数据模型inspectdb
正向生成,指的是先创建model.py文件,然后通过django内置的编译器,在数据库如mysql中创建出符合model.py的表。
反向生成,指的是先在数据库中create table,然后通过django内置的编译器,生成model代码。
应用场景:
django对已有数据库进行操作
一、准备工作
1.创建django项目
python manage.py startproject testproject
2.创建app
python manage.py startapp test
3.修改配置文件
3.1.注册app
#settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'test',
]
3.2.修改数据库文件
#settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':'123'
}
}
#ps:键必须都是大写
二、反向生成数据模型
#反向生成模型
python manage.py inspectdb
#生成结果如下
# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
# * Rearrange models' order
# * Make sure each model has one field with primary_key=True
# * Make sure each ForeignKey has `on_delete` set to the desired behavior.
# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the tab
le
# Feel free to rename the models, but don't rename db_table values or field names.
from django.db import models
class Test(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
name = models.CharField(unique=True, max_length=80)
class Meta:
managed = False
db_table = 'test'
#反向生成模型并生成文件
python manage.py inspectdb > models.py
#models.py文件内容与上面的生成结果一致。
#默认情况下,inspectdb创建非托管模型。 也就是说,在模型的Meta类中,managed = False告诉Django不要管理每个表的创建,修改和删除。如果想让Django管理表的生命周期,你需要将上面的托管选项更改为True,即将managed = False修改为managed = True。
django反向生成模型结束