美文网首页
PowerDesigner与Django反向生成models

PowerDesigner与Django反向生成models

作者: 发家致富靠养猪 | 来源:发表于2019-06-20 18:08 被阅读0次

    一、概念数据模型概述

    数据模型是现实世界中数据特征的抽象。数据模型应该满足三个方面的要求:
    1)能够比较真实地模拟现实世界
    2)容易为人所理解
    3)便于计算机实现

    概念数据模型也称信息模型,它以实体-联系(Entity-RelationShip,简称E-R)理论为基础,并对这一理论进行了扩充。它从用户的观点出发对信息进行建模,主要用于数据库的概念级设计。

    通常人们先将现实世界抽象为概念世界,然后再将概念世界转为机器世界。换句话说,就是先将现实世界中的客观对象抽象为实体(Entity)和联系(Relationship),它并不依赖于具体的计算机系统或某个DBMS系统,这种模型就是我们所说的CDM;然后再将CDM转换为计算机上某个DBMS所支持的数据模型,这样的模型就是物理数据模型,即PDM。

    CDM是一组严格定义的模型元素的集合,这些模型元素精确地描述了系统的静态特性、动态特性以及完整性约束条件等,其中包括了数据结构、数据操作和完整性约束三部分。
    1)数据结构表达为实体和属性;
    2)数据操作表达为实体中的记录的插入、删除、修改、查询等操作;
    3)完整性约束表达为数据的自身完整性约束(如数据类型、检查、规则等)和数据间的参照完整性约束(如联系、继承联系等);

    二、实体、属性及标识符的定义

    实体(Entity),也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物”。例如,学校中的每个学生,医院中的每个手术。
    每个实体都有用来描述实体特征的一组性质,称之为属性,一个实体由若干个属性来描述。如学生实体可由学号、姓名、性别、出生年月、所在系别、入学年份等属性组成。

    实体集(Entity Set)是具体相同类型及相同性质实体的集合。例如学校所有学生的集合可定义为“学生”实体集,“学生”实体集中的每个实体均具有学号、姓名、性别、出生年月、所在系别、入学年份等性质。

    实体类型(Entity Type)是实体集中每个实体所具有的共同性质的集合,例如“患者”实体类型为:患者{门诊号,姓名,性别,年龄,身份证号.............}。实体是实体类型的一个实例,在含义明确的情况下,实体、实体类型通常互换使用。

    实体类型中的每个实体包含唯一标识它的一个或一组属性,这些属性称为实体类型的标识符(Identifier),如“学号”是学生实体类型的标识符,“姓名”、“出生日期”、“信址”共同组成“公民”实体类型的标识符。

    有些实体类型可以有几组属性充当标识符,选定其中一组属性作为实体类型的主标识符,其他的作为次标识符。

    三、实体、属性及标识符的表达

    一、新建概念数据模型 1)选择File-->New,弹出如图所示对话框,选择CDM模型(即概念数据模型)建立模型。
    模型选择
    2)完成概念数据模型的创建。以下图示,对当前的工作空间进行简单介绍。
    工作空间进行简单介绍
    工具

    1.双击表格,打开属性窗口


    命名
    2.Attributes属性设置
    建表属性

    3.表结构


    表结构

    注意:一对多时从主表拉到从表(这个是从教师表拉到课程表)

    4.生成物理模型


    生成物理模型 配置 生成后的模型结构图

    5.映射数据库模型


    映射数据库

    6.导出sql文件,供给数据库使用
    注意:导出文件后,必须自己建数据库,或则是已经存在的数据库,然后导入文件
    导入文件命令

    source  [文件绝对路径]
    

    7.应用到django中
    7.1在django配置数据库时

    # setting 配置
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',  # 数据库类型
            'NAME': 'school',  # 数据库名
            'HOST': 'yourhost',  #  数据库主机号
            'PORT': 3306,
            'USER': 'root',
            'PASSWORD': 'yourpassword',
        }
    }
    # __init__ 配置
    import pymysql
    pymysql.install_as_MySQLdb() #如果遇到使用不了数据库的情况,请安装mysqlclient(pip install mysqlclient),然后注释掉本行内容。
    

    7.2数据库迁移
    命令行使用命令:

    python manage.py migrate # 第一次执行迁移数据库
    @如果需要在之后进行数据库更新
    一:
    python manage.py makemigrations # 生成迁移文件
    二:
    python manage.py migrate # 执行迁移文件
    

    7.3将数据库模型反向映射到models
    使用命令:

    python manage.py inspectdb >app应用名/models.py# 生成models
    
    @在models中需要修改的地方
    @如果表之间有多对多的关联字段
    @需要添加关联关系
    @课程与学生是多对多的关系
    class Student(models.Model):
        student_id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        birthday = models.DateField(blank=True, null=True)
        sex = models.CharField(max_length=2)
    # 以下是需要添加的一行
        lessons = models.ManyToManyField(Lesson, through='StudentLesson')
    
        class Meta:
            managed = False
            db_table = 'student'
    

    django多对多查询

    s1.lessons.all()  # 查询到该学生的所有课程
    l1.student_set.all() # 查询到该课程的所有学生
    

    7.4终端交互使用命令

    python manage.py shell
    在flask中,如果使用了flask_script构建了manage.py也可以使用该命令进入交互端
    

    相关文章

      网友评论

          本文标题:PowerDesigner与Django反向生成models

          本文链接:https://www.haomeiwen.com/subject/tcobvqtx.html