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


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

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

    我们在展示django ORM反向生成之前,我们先说一下怎么样正向生成代码。

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

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

    1、准备工作

    创建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',
        }
    }

    2、正向生成

    在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

    可以到配置的数据库中,查看创建成功的表

    3、反向生成

    现在数据库中创建表

    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映射了数据库中的表名。

  • 相关阅读:
    HttpServlet RequestDispatcher sendredirect和forward
    java中判断字符串是否为数字的方法的几种方法
    apk 解包 打包
    js cookie
    js中的this关键字
    Myeclipse 添加Android开发工具
    List<T> List<?> 区别用法
    mysql 命令
    BZOJ 2281 Luogu P2490 [SDOI2011]黑白棋 (博弈论、DP计数)
    【学习笔记】求矩阵的特征多项式
  • 原文地址:https://www.cnblogs.com/kangoroo/p/7495880.html
Copyright © 2020-2023  润新知