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

 

 

posted @ 2019-11-13 21:37  www.pu  Views(780)  Comments(0Edit  收藏  举报