引言 本文将介绍在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
#数据库连接池的大小,。默认5
SQLALCHEMY_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的配置文件,并设置别名:FlaskConfig
from flask import Flask
from 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):
pass
db.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()-->查询第一匹配的数据,并返回数据的id
print("表数据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()-->查询第一匹配的数据,并返回数据的id
print("表数据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()-->查询第一匹配的数据,并返回数据的id
print("表数据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()