数据库表反向生成(二) Django ORM inspectdb

前一篇咱们说了,mybatis-generator反向生成代码。html

这里咱们开始说如何在django中反向生成mysql model代码。 python

咱们在展现django ORM反向生成以前,咱们先说一下怎么样正向生成代码。mysql

正向生成,指的是先建立model.py文件,而后经过django内置的编译器,在数据库如mysql中建立出符合model.py的表。sql

反向生成,指的是先在数据库中create table,而后经过django内置的编译器,生成model代码。数据库

 

一、准备工做django

建立django工程以及appsession

建立django工程,名字是helloworldmybatis

django-admin.py startproject helloworld

建立app,名字是testapp

python manage.py startapp hello  

配置数据库spa

在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',  
    'hello',  
]  

在settings.py中配置数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'big_data',
        'USER': 'root',
        'PASSWORD': '1234',
        'HOST': '10.93.84.53',
        'PORT': '3306',
    }
}

 

二、正向生成

在hello app的目录下建立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

能够到配置的数据库中,查看建立成功的表

 

三、反向生成

如今数据库中建立表

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`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

而后执行命令,生成model.py代码

python manage.py inspectdb

生成的代码model.py以下

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'

这里面的db_table映射了数据库中的表名。

相关文章
相关标签/搜索