在Flask中并没有限制我们使用哪种方式来操作数据库,如果使用原生SQL的方式来操作数据库,随着项目代码量的提升会发现有大量操作数据库的冗余代码,以及大量SQL语句与逻辑代码杂糅在一起不利于核心代码的读写,并且SQL语句的利用率不高。当更换数据库产品时有些特定SQL语句需要重写,而使用ORM框架能很好的避免上述问题。
ORM
ORM(Object Relational Mapping)中文翻译过来叫作对象关系映射,它把一个类映射成数据库里的一张表而属性映射成数据库表的列,每一个实例对象对应数据库表里的一行数据。通过它我们可以直接使用面向对象的方式来编写程序而不再直接书写原生的SQL语句,而且大部分ORM框架支持多种数据库只需很少的配置即可完成数据库产品的更换,在Python中常见的ORM框架有SQLAlchemy、Django Model、PeeWee等。
Flask-SQLAlchemy扩展
SQLAlchemy是目前很流行的ORM框架,Flask-SQLAlchemy扩展可以帮助我们在Flask中方便的使用SQLAlchemy
安装Flask-SQLAlchemy扩展,假如你没有安装SQLAlchemy会一并安装上1pip install flask-sqlalchemy
数据模型
模型是对数据抽象并提供通用访问接口的一种方式,一个模型类对应于数据库中的一张表。
定义模型类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///test.db"
db = SQLAlchemy(app)
# 分类
class Category(db.Model):
__tablename__ = "t_category"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
db.create_all()
代码说明: 所有模型必须继承至 db.Model,使用 __tablename__ 属性指定数据库中表名,如果不指定表名默认为类名。模型类的属性对应于数据表中的列,通过 db.Column 类的实例来描述,最后 db.create_all() 会帮助我们创建表结构
连接数据库的信息通过app.config[“SQLALCHEMY_DATABASE_URI”]来指定,常见数据库的连接信息如下数据库连接地址SQLitesqlite:///文件名
MySQLmysql+pymysql://用户名:密码@主机:3306/数据库名
Oracleoracle+cx_oracle://用户名:密码@主机:1521/SID名
SQL Servermssql+pymssql://用户名:密码@主机:端口/数据库名
注: 上面有些URL中的协议部分有加号需要安装指定模块,如MySQL需要安装PyM