美文网首页
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