Flask学习笔记--ORM框架

这两天在学flask框架,今天学到ORM,进度比较快,新的内容太多了,笔记一下子多了好多,学完第二天就有点忘了。。记录一下今天学的吧,以后把前几天的学习内容补上,没事也可以来看看~

谈ORM之前,先介绍一下模型

1.什么是模型:
	模型是根据数据库中表结构而创建的class
    数据库中的每一张表对应到编程语言中就是一个class
    表中的每一个列,就是class中的一个属性
2. 1ORM(ORM是一种模型的框架)
	全称 object relational Mapping (对象关系映射)

ORM的三个特征

1.数据表(table)到class 的映射
2.数据类型的映射数据库中表的字段以及类型,对应到编程语言就是类的属性以及数据类型
3.关系映射将数据库中表与表的关系对应到编程语言中 类与类的关系
              create table user(
                  id int primary key auto_increment,
                  user varchar(16) nou null,
                  age int not null
              );        
              对应的映射: 
               class User(xxxx):
                id = xxx
                user = xxx
                age = xxx   

ORM的优点

        1.封装了数据库中所有的操作,
        提升效率允许通过模型类自动生成数据表
        2.省略庞大的数据访问层,即便不适用sql编码也能完成数据库的
        CEUD操作
        C Create
        R reteive
        u update
        d delete       

Flask 中的ORM框架(SQLAlchemy框架)

1.SQLAlchemy框架
    python 中的ORM框架
    1.安装pip install sqlalchemy
    2.Flask需要使用flask-sqlalchemy 支持包
        pip3 install flask-sqlalchemy

学的时候碰到一个’‘新‘’知识:
create database flaskDB default charset utf8 collate utf8_general_ci;
以前创建数据库的时候没有用到collate utf8_general_ci 百度查了一下是不对大小写敏感的意思。sc是大小写敏感。

在Flask中配置数据库

from flask import Flask

app = Flask(__name__)
# 语法声明
#app.config['SQLALCHEMY_DATABASE_URI'] = 
#"mysql://用户名称:数据库密码@数据库服务地址:端口号/数据库名"

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:12456@127.0.0.1:3306/flaskDB"

创建SQLALchemy的实例

from flask_sqlalchemy import SQLAlchemy
from flask import Flask

app = Flask(__name__)
<!-- import  pymysql
pymysql.install_as_MySQLdb() --> # 这两句代码等同于 下面的mysql+pymysql
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:12456@127.0.0.1:3306/flaskDB"
db = SQLAlchemy(app)

#允许通过db做所有与数据库相关的操作

@app.route()
def idnex():
    pass
 if __name__ == "__main__":
    xxxx  

指定信号追踪,提升处理效率

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

4.定义模型类

模型:根据数据库表结构而创建出来的类(模型类,实体类)

1.语法
    class MODELNAME(db.Model)
    __tablename__ = "TABLENAME"
    COLUMN_NAME = db.Column(db.TYPE,OPTIONS)

    1.MODELNAME:定义模型类的名称,根据表名定
    表名USERS
    MODELNAME:User
    2.TABLENAME:映射到数据库中表的名称
        表名:USER
        TABLENAME:USERS
        MODELNAME:Users
    3. COLUMN_NAME: 映射到数据库的列名
    4.db.TYPE:映射到列的类型
        db.TYPE常用列类型
        Integer  int    整数
        Float    float  浮点数
        Numeric  decimal.decimal   定点数
        String   str     字符串
        Text     str     字符串
        Boolean   bool   布尔型
        Date    datetime.date  日期类型
        Time   datetime.time  时间类型
        DateTime  datetime.datetime 日期时间类型
    5.OPTIONS 指定列选项
    选项名          说明    
    autoincrement   True 该列自增长
    注意:如果列的类型为int并且为主键 默认自增长
    prmary_key      如果为TRUE 表示改列是主键
    unique          True 唯一
    index            加索引
    nullable        true  可以为空
    default         指定该列的默认值

举个例子:

class Users(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer,
                   primary_key=True)
    username = db.Column(db.String(80),
                         nullable=False, #不为空
                         unique=True, # 值唯一
                         index=True) #增加索引
    age = db.Column(
        db.Integer,
        nullable=True
    )
    email = db.Column(db.String(120),
                      unique=True)
    db.create_all()#作用:将所有的实体类生成对应的数据表
    # 前提: 对应的表不存在的前提下才能生成

db.create_all(),和db.drop_all()是创建和删除,在实际应用中这么做会出现问题。他不能修改表的属性。所以要引进数据库的迁移

数据库的迁移

1.将实体类的改动再映射回数据库
依赖于第三方库
1.flask_script
    包flask_script
    类:Manager
     作用:对项目进行管理,如启动项目,添加命令等

创建Mananer实例,指定要管理哪个APP

        manager = Manager(app)
2.flask_migrate
    包:flask_migrate
    类:
        1.Migrate
        作用:用于管理app和db

创建Migrate对象,并指定要关联的APP,DB

migrate = Migrate(app,db)            
        2.MigrateCommand
        作用:提供了数据迁移的指令    

为manager增加数据迁移的子命令

manager.add_command('db',MigrateCommand)             

app.run()改为 manager.run()
只能在终端中  python3 xxx.py runserver 运行 这样比较麻烦 不能直接点run运行所以还有一种方法可以方便运行

指定启动模式为调试模式

app.config['DEBUG'] = True

改完后还需要设置一些东西
在这里插入图片描述
在红线处加上这几句话 就可以每次点击run自动了
在这里插入图片描述

一个完整的基本框架代码

from flask import Flask,render_template,request
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand

app = Flask(__name__)
 # 指定数据库的配置信息,连接到flaskDB的数据库
app.config['SQLALCHEMY_DATABASE_URI'] =\
     "mysql+pymysql://root:123456@127.0.0.1:3306/flaskDB"
# 指定信号追踪
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
 # 创建SQLAlchemy的示例 - db ,用于做数据库的操作
db = SQLAlchemy(app)
app.config['DEBUG'] = True #启动模式修改为调试模式
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True #自动提交映射数据
# 创建Mananer实例,指定要管理哪个APP
manager = Manager(app)
# 创建Migrate对象,并指定要关联的APP,DB
migrate = Migrate(app,db)
# 为manager增加数据迁移的子命令
manager.add_command('db',MigrateCommand)

先写到这了。。。。太多了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值