Flask之models(一):ORM、SQLAlchemy、flask-migrate

一.ORM

1.概括

ORM(Object Relational Mapping)即为对象关系映射。
其是通过使用描述对象和数据库之间映射,将程序中的对象自动持久化到关系数据库中。

1.几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
2.当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息等等。

简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。

二.SQLAlchemy

1.models的概括

1.models其实就是数据交互的封装。
2.Flask默认并没有提供任何数据库操作的API,在Flask中可以自主的选择数据,用原生语句实现功能,但是使用原生SQL语句有缺点,也可以选择ORM,例如SQLAlchemy、MongoEngine,将对象的操作转换为原生SQL。

原生SQL的缺点:
  (1)代码利用率低,条件复杂代码语句越过长,有很多相似语句
  (2)一些SQL是在业务逻辑中拼出来的,修改需要了解业务逻辑
  (3)直接写SQL容易忽视SQL问题

使用ORM的优点
 (1)易用性,可以有效减少重复SQL
 (2)性能损耗少
 (3)设计灵活,可以轻松实现复杂查询
 (4)移植性好

3.Flask中并没有提供默认ORM,所以可以通过操作对象,实现对数据的操作。

2.基本使用

1.安装
   pip install flask-sqlalchemy
2.在models中创建sqlalchemy的对象
    db = SQLAlchemy()
3.在init中对db对象进行初始化
    db.init_app(app=app)

注意:必须要在初始化之前添加SQLALCHEMY_DATABASE_URI和SQLALCHEMY_TRACK_MODIFICATIONS=False的两个赋值

4.在init中对SQLALCHEMY_DATABASE_URI进行赋值
   数据库 + 驱动 : // 用户:密码@ 主机:端口/数据库
例如:app.config[‘SQLALCHEMY_DATABASE_URI’]=‘mysql+pymysql://root:1234@localhost:3306/flask’
5. 在init中对警告进行赋值(在未来的版本更新上可能会有的错误)
   app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS’] = False
6.在models文件中,通过python代码来创建一个表。

class User(db.Model):
    # 模型的创建 必须有一个主键
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    name = db.Column(db.String(32))
    age = db.Column(db.Integer)
    # 在创建表的时候,表名默认与类名一致,但是我们可以指定表名
    __tablename__='user1'

7.执行
在views中添加:db.create_all()

@blue.route('/createUser/')
def createUser():
    db.create_all()
    return '当我们执行这句话的时候就会在数据库中创建表'

运行结果:
在这里插入图片描述

3.遇到的错误

1.如果执行create_all的时候,那么报错ModuleNotFoundError: No module named ‘pymysql’,那么证明你的虚拟环境中,没有pymysql的安装,应输入pip install pymysql命令进行安装。
2.如果出现(in table ‘user’, column ‘name’): VARCHAR requires a length on dialect mysql错误,是因为在flask中的字符串数据类型的字段,必须指定长度,例如:name = db.Column(db.String(20))

4.删除表

@blue.route('/dropUser/')
def dropUser():
    db.drop_all()
    return '当我们执行这句话的时候就会使数据库删除表'

运行结果:
在这里插入图片描述

5.添加数据

@blue.route('/addUser/')
def addUser():
    user = User()
    user.name = '张三'
    user.age = 18

    db.session.add(user)
    db.session.commit()

    return '添加成功'

方法/函数的命名: 一般都是动作 + 模块

运行结果:
在这里插入图片描述

三.flask-migrate(模型迁移)

1.概念

模型迁移就是不需要执行create_all 或者 drop_all等方法,就可以直接操作模型的创建以及删除。

2.基本使用

1.安装
   pip install flask-migrate
2.创建以及初始化
   在init中  migrate = Migrate()
        migrate.init_app(app=app,db=db)

其中db就是sqlalchemy的对象

3.在manager中添加
   manager.add_command(‘db’,MigrateCommand)

因为我们可以使用命令行来操作这个执行,所以要添加到manager上

4.(1)生成migrations的文件夹:
    python manager.py db init
    在这里插入图片描述
 (2)生成迁移文件,操作了哪个模型就生成哪个模型的迁移文件:
     python manager.py db migrate
  在云服务器上输入上面的命令后,可以pycharm中查看迁移文件:
  在这里插入图片描述
  在这里插入图片描述
 (3)升级并执行迁移文件:
     python manager.py db upgrade
在这里插入图片描述
以上三步就能将模型迁移到数据库并生成表

(4)降级(删除):
   python manager.py db downgrade
   在这里插入图片描述
5.扩展
创建用户文件,自定义名字:
  python manager.py db migrate --message ‘创建用户’
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值