• 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
  • 相关阅读:
    设计模式
    雨夹雪背景特效
    lottie-前端实现AE动效
    响应式布局实现原理
    关于小程序(含uniapp)中使用npm模块
    使用脚手架快速搭建React项目
    vue项目接入友盟统计站点数据
    git常用命令
    uniapp请求方法的封装
    小程序获取用户登录及手机号登录
  • 原文地址:https://www.cnblogs.com/harryblog/p/10218412.html
Copyright © 2020-2023  润新知