WEB全栈--模型Models----(1)

WEB全栈

模型-Models

  1. 什么是模型
    模型:根据数据库表结构而创建出来的class
    一张表一个类
    一个字段就是一个属性

  2. 模型框架—ORM

    1. ORM – Object Relational Mapping
      对象关系映射
      ORM,O/RM O/M Mapping
    2. ORM的三大特征
    3. 数据表到编程类的映射
    4. 数据类型的映射
    5. 关系映射
      将数据库中表与表之间的关系,对应到编程语言中类与类之间的关系。
      3.ORM的优点
      1.封装操作提升效率
      2.省略庞大的数据访问层
  3. Flask中的ORM框架

    1. SQLAlchemy

      1. 安装SQLAlchemy
        pip3 install sqlalchemy
      2. Flask中需要使用flask-sqlalchemy支持包
        pip3 install flask-sqlalchemy
        查看已安装的包 pip3 list
    2. 创建数据库
      创建一个flaskDB的数据库
      create database flaskDB default charset=utf8 collate utf8_general_ci;

    3. Flask中配置数据库
      app.config[‘SQLALCHEMY_DATABASE_URI’]=“mysql://用户名:密码@数据库服务器地址:端口号/数据库名称”

       示例:
       	app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:123456@127.0.0.1:3306/flaskDB'
      
      from flask import Flask, request, render_template
      from flask_migrate import Migrate, MigrateCommand
      from flask_sqlalchemy import SQLAlchemy
      from flask_script import Manager
      from sqlalchemy import or_, func
      
      app = Flask(__name__)
      #连接到mysql中的FlaskDB数据库
      app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:123456@127.0.0.1:3306/flaskDB'
      #指定不需要信号追踪
      app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
      #指定程序的启动模式为调试模式
      app.config['DEBUG'] = True
      #指定执行完增删改之后的自动提交
      app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
      #创建SQLalchemy的实例
      db = SQLAlchemy(app)
      # print(db)
      
      #创建Manager对象并指定要管理的app
      manager = Manager(app)
      
      #创建migrate对象,并指定关联的app 和 db
      migrate = Migrate(app,db)
      #为manager增加数据库迁移指令
      #为manager增加一个子命令 --db(自定义),具体操作有MigrateCommand来提供
      manager.add_command('db',MigrateCommand)
      
  4. 定义模型类

    1. 作用
      通过编写模型类的方式,让程序自动生成数据库表
      模型类也称为实体类

    2. 语法

       class MODELNAME(DB.Model):
       	__tablename__ = "TABLENAME"
       	COLUMN_NAME = db.Column(db.TYPE,OPTIONS)
      
      1. MODELNAME 定义模型类名称,参考表名

      2. TABLENAME 指定要映射到的表名,如果表不存在的话,则创建表

      3. COLUMN_NAME 属性名,映射到数据表中就是列名

      4. TYPE 映射到列的数据乐类型

      5. OPTIONS 列选项

         db.TYPE	列类型:
         类型名		数据库		python		说明
         Integer		int			int
         Float		float		float
         Numeric		numeric		Decimal		定点数
         String		varchar		str
         Text		text		str
         Boolean		tinyint		bool
         Date		date		datetime.date
         DateTime	datetime	datetime.datetime
        
        
         OPTIOINS		列选项
         选项名				说明
         autoincrement		如果取值为true,则自动增长
         	注意:	如果列类型为整数,并且是主键的话,默认就是自增长的
         primary_key		如果取值为true表示该列为主键
         unique			如果取值为true表示该列唯一
         index			如果取值为true表示该列加索引
         nullable		如果取值为true表示该列可为空
         default			指定该列默认值
        

      练习:

      • 创建Student实体类,表名student
        1. id,主键自增
        2. sname,姓名,长度为30且部位空字符串
        3. sage,年龄,整数
        4. isActive,启用状态,bool类型,默认为True
      • 创建Teacher类,表名teacher
        1. id,主键自增
        2. tname,同sname一样
        3. tage,年龄,整数
      • 创建Course类,表名course
        1. id
        2. cname,课程名称,长度为30字符串
        class Student(db.Model):
            __tablename__ = "student"
            id = db.Column(db.Integer,primary_key=True)
            sname = db.Column(db.String(30),nullable=False)
            sage = db.Column(db.Integer)
            isActive = db.Column(db.Boolean,default=True)
        
        
        class Teacher(db.Model):
            __tablename__ = "teacher"
            id = db.Column(db.Integer, primary_key=True)
            tname = db.Column(db.String(30),nullable=False)
            tage = db.Column(db.Integer)
        
        class Course(db.Model):
            __tablename__ = "course"
            id = db.Column(db.Integer, primary_key=True)
            cname = db.Column(db.String(30))
        
  5. 数据库迁移

    1. 什么是数据库迁移?
      将实体类的改动在映射回数据库。
    2. 依赖于第三方库。
      1. flask-script
        安装:pip3 install flask-script
        包:flask_script
        类:Manager
        作用,对项目进行管理。
        启动项目,为项目增加管理指令。
      2. flask-migrate
        安装:pip3 install flask-migrate
        包:flask_migrate
        类:
        1. Migrate
          作用:协调app和db 之间的关系
        2. MigrateCommand
          作用:在终端中提供实体类迁移的指令
    3. python3 flaskDB.py db
      1. init
        作用:执行项目和数据库的初始化操作
        特点:一个项目中只执行一次即可

         python3 run.py db init
        
      2. migrate
        作用:将编辑好的实体类生成一个中间文件并保存
        特点:只要检测到实体类有更改,就会生成中间文件。

         python3 run.py db migrate
        
      3. upgrade
        作用:将中间文件映射会数据库

         python3 run.py db upgrade
        

作业:
参考blog_finally中 register.html 和release.html 分析数据库模型
通过register.html分析用户表User有哪些列
通过release.html分析文章表Topic有哪些列

创建数据库 -- Blog
创建项目 - Blog
创建实体类 - User,Topic
create database Blog default charset=utf8 collate utf8_general_ci;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值