Django中反向生成models


我們在展示django ORM反向生成之前,我們先說一下怎么樣正向生成代碼。

正向生成,指的是先創建model.py文件,然后通過django內置的編譯器,在數據庫如mysql中創建出符合model.py的表。

反向生成,指的是先在數據庫中create table,然后通過django內置的編譯器,生成model代碼。

一 准備工作

創建django工程以及app

創建django工程,名字是helloworld

django-admin.py startproject helloworld

創建app,名字是test

python manage.py startapp hello  

配置數據庫

在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

三 反向生成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代碼

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'

將代碼導入到項目中

python manage.py inspectdb > hello/models.py

根據表名生成

python manage.py inspectdb school_schoolinfo

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM