数据库表反向生成django ORM inspectdb

Posted 扎心了老铁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库表反向生成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映射了数据库中的表名。

 

以上是关于数据库表反向生成django ORM inspectdb的主要内容,如果未能解决你的问题,请参考以下文章

关于django操作orm的一些事--反向生成orm连接多个数据库

django 使用原生SQL语句反向生成MODELS.PY中的表结构

python-django的ORM

数据的查,改,删django orm中如何创建表关系django请求生命周期流程图路由层无名有名分组反向解析

数据的查,改,删django orm中如何创建表关系django请求生命周期流程图路由层无名有名分组反向解析

数据库表反向生成mybatis-generator与IDEA的集成