引言 本文将介绍在Flask中使用第三方库“flask_sqlalchemy”进行操作数据库。 官方文档
1.安装flask_sqlalchemy
pipenv install flask_sqlalchemy pymysql
2.常用方法
1.Flask配置
1.Flask配置文件操作
在Flask的配置文件(flaskConfig.py)中对“Flask-sqlalchemy”进行“数据库连接”、“打印输出执行的SQL语句”等
# 下面是关键配置# 使用pymysql驱动进行数据库连接配置SQLALCHEMY_DATABASE_URI = f'mysql+pymysql://{user}:{password}@{host}:{port}/{database}?charset=utf8'# 是否显示底层执行的SQL语句【True-->显示-->有利于debug;(默认)False-->不显示】SQLALCHEMY_ECHO = False#设置每次请求结束后会自动提交数据库中的改动,一般都设置手动保存,Ture表示自动保存SQLALCHEMY_COMMIT_ON_TEARDOWN=True# 是否追踪对象的修改并发送信息【(默认)True-->需消耗内存;【建议--》Fasle】】SQLALCHEMY_TRACK_MODIFICATIONS = False#数据库连接池的大小,。默认5SQLALCHEMY_POOL_SIZE=10#设置数据库--自动回收连接SQLALCHEMY_POOL_RECYCLE = 500# TRAP_BAD_REQUEST_ERRORS = True#设定连接池的连接超时时间。默认是 10 秒SQLALCHEMY_POOL_TIMEOUT=20
2.实例化db对象
# 此示例展示:最小代码结构import resource.flaskConfig as FlaskConfig # 导入flask的配置文件,并设置别名:FlaskConfigfrom flask import Flaskfrom flask_sqlalchemy import SQLAlchemy # 导入SQLAlchemy类对象app = Flask(__name__) # 实例化Flask对象app.config.from_object(FlaskConfig) # 加载flask的配置文件db = SQLAlchemy(app) # 初始化db对象
2.基本操作
1.创建—模型与表映射
在flask-sqlalchemy中,创建一张数据库表(table),需要继承db.Models,并且【关键执行:db.create_all() 】,示例如下所示:
1.属性参数介绍
| 属性值 | 说明 | 备注 |
|---|---|---|
| db.Integer | 整数 | |
| db.String(长度) | (可变/不可变)字符 | |
| db.Text | 文本 | |
| primary_key | 主键 | primary_key=True |
| autoincrement | 自增 | autoincrement=True |
| nullable | 是否为空 | nullable=False |
| default | 默认值 |
2.代码实现
# 创建一张表【创建模型-->db.Model;表属性的映射-->db.Column()】class Plan(db.Model):__tablename__ = 'plan' # 设置表名, 表名默认为类名小写id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 设置主键, 默认自增name = db.Column(db.String(20), nullable=False) # 设置字段名 和 不为空taskNumber= db.Column(db.Integer, default=10, nullable=False) # 设置默认值class project(db.Model):passdb.create_all() # 创建表和数据库
2.新增(insert)
在flask-sqlalchemy中的“增加(insert)”操作,最后需要借助db.session.add(新增的数据)来实现。
1.执行操作流程图
2.代码实现
@app.route("/api/ops")def insertOps():# 增加plan = Plan(name="软件测试计划-9月", taskNumber=130)db.session.add(plan) # session(用于增删改)print("新增数据成功")# db.session.commit() # 提交事务操作【当flask配置文件中设置commit=True,则可注释此行】
3.查询(select)
在flask-sqlalchemy中的“查询(select)”操作,最后需要借助Model.query.filter(key=value).first/all来实现,最终返回Model的id(即表数据id)。
1.执行操作流程图
2.代码实现
@app.route("/api/ops")def insertOps():# 查询# select * from plan where plan.name = '软件测试计划-7月'resID=Plan.query.filter(Plan.name == '软件测试计划-7月').first() # first()-->查询第一匹配的数据,并返回数据的idprint("表数据id=\t",resID)print("taskNumber字段数据\t",resID.taskNumber)
4.删除(delete)
在flask-sqlalchemy中的“删除(delete)”操作,需要通过select查询到id,然后通过db.session.delete(id)来实现。
1.执行操作流程图
2.代码实现
@app.route("/api/ops")def insertOps():# 删除resID=Plan.query.filter(Plan.name == '软件测试计划-7月').first() # first()-->查询第一匹配的数据,并返回数据的idprint("表数据id=\t",resID)if resID is not None:db.session.delete(resID) # 【执行】数据删除操作else:print("无可删除的数据")
5.更新(update)
在flask-sqlalchemy中的“删除(delete)”操作,需要通过select查询到id,然后通过db.session.delete(id)来实现。
1.执行操作流程图
2.代码实现
@app.route("/api/ops")def insertOps():# 更新resID = Plan.query.filter(Plan.name == '软件测试计划-6月').first() # first()-->查询第一匹配的数据,并返回数据的idprint("表数据id=\t", resID)if resID is not None:# 【执行】数据更新操作resID.name = "update-软件测试计划-6月"resID.taskNumber = 2022# db.session.commit() # 提交事务操作【当flask配置文件中设置commit=True,则可注释此行】print("数据更新成功")else:print("无可更新的数据")
3.扩展
1.or
在flasksqlalchemy中使用【sql】or,**需要导包“from sqlalchemy import or, and_”**,具体实现如下所示:
#【step1】导包from sqlalchemy import or_, and_ # 进行【select where or】的查询#【step1】 or的使用resCount = User.query.filter(or_(User.username == username, User.email == email, User.phone == phone)).count()


