文章目录
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
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
()
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()
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初始化操作封装成函数解决循环导入问题