flask-sqlalchemy学习

tech2022-08-11  128

文章目录

flask-sqlalchemy插件学习一、安装flask-sqlalchemy二、使用步骤1.初始化app时,修改app配置2.使用方式创建表新增记录查询数据更新数据删除数据 三.注意事项


flask-sqlalchemy插件学习

使用flask_sqlalchemy插件,实现数据库与模型绑定,无需编写原生sql代码,用操作对象的方式实现数据的增删改查


一、安装flask-sqlalchemy

安装flask-session pip install flask-sqlalchemy -i https://mirrors.aliyun.com/pypi/simple/

二、使用步骤

1.初始化app时,修改app配置

from flask import Flask from flask_script import Manager from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # "{BACKEND}+{DRIVER}://{USER}:{PASSWORD}@{HOST}:{PORT}/{DB}" app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://user:passwd@host:port/database" db = SQLAlchemy(app) manage = Manager(app=app) if __name__ == '__main__': manage.run() BACKEND数据库类型DRIVER操作数据库驱动USER数据库用户名PASSWORD数据库密码HOST数据库主机名PORT数据库端口号DB数据库名称

2.使用方式

创建表

在model文件中,创建类,继承db.Model (db为app中SQLAlchemy生成的实例对象)通过对db对象的操作实现对表的创建 在类中定义表字段,db.Column(类型,约束等) class Student(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(16)) def __str__(self): return f'Student : {name}' 创建 model中定义的所有表终端执行 db.create_all()

新增记录

student = Student() student.name = '小明' db.session.add(student) db.session.commit()

查询数据

# 查询所有记录 result = db.session.query(Student).all() # 查询某个字段 result1 = db.session.query(Student.name).all() # 条件查询 result2 = db.session.query(Student).filter(Student.name='小明').one() # 多条件查询 result3 = db.session.query(Student.name).filter(and_(Student.s_name == '小明', Student.id == 2)).one() result4 = db.session.query(Student.name).filter(or_(Student.s_name == '小明', Student.id == 2)).one() # in,like result5 = db.session.query(Student).filter(Student.s_name.in_(['小明','小红'])).one() result6 = db.session.query(Student).filter(Student.s_name.like('%红%')).one() # 空与非空判断 result7 = db.session.query(Student).filter(Student.name == None).one() result8 = db.session.query(Student).filter(Student.name != None).one() # 排序 result9 = db.session.query(Student).order_by(Student.name.desc).all() # 分组 func中包含聚合函数 result10 = db.session.query(func.count(Student.name),Teacher.name).group_by(Student.name).all()

***也可以使用类.query.filter()方式

更新数据

先查询出所需记录,通过对象赋值方法修改 student = db.session.query(Student).filter(Student.name='小明').one() student.name = '小红' db.session.commit()

删除数据

先查询出所需记录,通过db.session.delete()方式删除 student = db.session.query(Student).filter(Student.s_name=='小明').one() db.session.delete(student) db.session.commit()

三.注意事项

由于每个视图函数均需要导入db,db需要app对象,会引起循环导入 重新规划项目目录结构,使用懒加载模式,将app初始化操作封装成函数解决循环导入问题

最新回复(0)