一、ORM 模型设计
在MTV架构中,M表示Model层负责与数据库进行交互,ORM(Object Relational Mapping)对象关系映射可以将具体的模型与数据库中的表进行一一对应,模型对象的属性与数据库表的字段是一一对应的;通过模型的操作来实现对数据库表的操作
ORM的重要特性:
- 基于面向对象的编程思想
- 几乎不写SQL,提升开发效率
- 支持多种类型数据库切换
SQLAlchemy
SQLAlchemy
是一个提供了SQL工具包及对象关系映射(ORM)工具的第三方库,Flask框架本身是没有ORM功能的,因此需要通过使用Flask-SQLAlchemy扩展来实现ORM,关于Flask-SQLAlchemy的介绍可以参考官方文档
Flask的ORM扩展需要单独进行安装,但是需要提前安装 mysqlclient 依赖
# 依赖 pip3 install mysqlclient pip3 install Flask-SQLAlchemy 复制代码
Flask-SQLAlchemy连接数据库的配置如下:
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://用户名:密码@数据库地址/要连接的数据库' 复制代码
SQLALCHEMY_DATABASE_URI,数据库URI既统一资源定位符,是一个用于标识资源名称的字符串
如果要配置多个数据库,可以使用这种方式
SQLALCHEMY_BINDS = { 'mysql': 'mysqldb://localhost/数据库', 'sqlite': 'sqlite:////path/to/数据库' } 复制代码
ORM 模型创建
在PyCharm创建新的Flask项目flask-sqlalchemy
使用ORM模型需要先绑定到Flask对象,在app.py中创建Flask对象之后,将对象绑定到数据库
from flask_sqlalchemy import SQLAlchemy # 配置数据库连接 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@localhost/flask' # 绑定Flask对象 db = SQLAlchemy(app) 复制代码
接着在该文件中设计数据库模型User
# 设计数据库模型 class User(db.Model): # 指定表名称 # __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), nullable=False) password = db.Column(db.String(256), nullable=False) birth_date = db.Column(db.Date, nullable=True) age = db.Column(db.Integer, default=0) 复制代码
终端中执行创建命令输入 python3 ,通过执行以下命令创建表或者删除表
from app import db db.create_all() # 创建所有的表 db.drop_all() # 删除所有的表 复制代码
退出命令行,重新进入,先执行删除,再执行创建,不指定表名时默认表名由sys+模型名称首字母小写
ORM 模型字段类型
字段类型 | 字段描述 |
Integer/Float | 整数类型/浮点数类型 |
String(size) | 字符串,通过max_lenght指定字符串长度 |
Text | 长文本 |
DateTime | 时间类型,对应datetime |
Boolean | 布尔类型 |
PickleType | 存储为一个持久化的Python对象 |
LargeBinary | 存储一个任意大的二进制数据 |