12 django 反向生成models.py
我们在展示django ORM反向生成之前,我们先说一下怎么样正向生成代码
正向生成,指的是先创建model.py文件,书写类和各种字段,然后执行数据库迁移,在数据库如mysql中创建出符合model.py的表
反向生成,指的是先在数据库中create table,然后执行反向生成命令,根据已经存在的表生成model代码
一 准备工作
创建django项目以及app
创建django项目,名字是helloworld
django-admin.py startproject helloworld
创建app,名字是app01
python manage.py startapp app01
配置数据库
在settings.py的INSTALLED_APPS注册app
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01', ]
在settings.py中配置数据库
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'big_data', 'USER': 'root', 'PASSWORD': '123', 'HOST': '127.0.0.1', 'PORT': '3306', } }
二 正向生成
在app01目录下model.py中写类和字段
from django.db import models class AlarmGroup(models.Model): group_name = models.CharField(primary_key=True, max_length=250) group_des = models.TextField(blank=True, null=True) members = models.TextField(blank=True, null=True) timestamp = models.DateTimeField()
执行数据库迁移命令生成表
python manage.py makemigrations
python manage.py migrate
三 反向生成ORM
先在数据库中创建表
CREATE TABLE `alarm_group` ( `group_name` varchar(250) NOT NULL, `group_des` blob, `members` blob, `timestamp` datetime NOT NULL, `on_duty` blob, `leader` blob, PRIMARY KEY (`group_name`) ) ENGIN
然后执行命令,生成model.py代码(加上app01可直接生成到models.py里面)
python manage.py inspectdb
生成的model代码如下
class AlarmGroup(models.Model): group_name = models.CharField(primary_key=True, max_length=250) group_des = models.TextField(blank=True, null=True) members = models.TextField(blank=True, null=True) timestamp = models.DateTimeField() class Meta: managed = False db_table = 'alarm_group'
将model导入到app01的model.py文件里
python manage.py inspectdb > app01/models.py