• python Django 之 Model 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映射了数据库中的表名。

    转载自:

    http://www.cnblogs.com/kangoroo/p/7495880.html

  • 相关阅读:
    【万丈高楼平地起 第一季 链表是怎样链成的】
    【笔记——ASP.NET基础知识(一)】
    【万丈高楼平地起 第二季 队列和栈】
    【没有银弹No Silver Bullet】
    【简单示例:数据库表转XML】
    【软件工程小知识】
    【总结——SQL Server中的数据类型】
    【总结—.Net Framework集合类】
    【笔记——ASP.NET基础知识(二)】
    【总结——ASP.NET对象】
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/10210540.html
Copyright © 2020-2023  润新知