一.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 ‘创建用户’