数据库操作
插入
1.创建实体类的对象
2.完成插入
db.session.add(实体对象)
db.session.commit()
数据库配置
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:123456@localhost:3306/flask"
指定当视图执行完毕后,自动提交数据库操作
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
指定每次执行操作时打印原始的SQL语句
app.config['SQLALCHEMY_ECHO'] = True
创建数据库应用实例
db = SQLAlchemy(app)
创建实体类
class Users(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), nullable=True, unique=True)
age = db.Column(db.Integer)
email = db.Column(db.String(120), unique=True)
def __init__(self, username, age, email):
self.username = username
self.age = age
self.email = email
def __repr__(self):
return '' % self.username
查询(基于db.session 和 基于 Models 类)
基于 db.session 进行查询(适用于多表查询)
1. db.session.query(Models1, Models2,...)
参数:要查询的实体类(表),如果是多个实体类的话,相当于要做多表的连接查询
返回:对应的类的一个查询对象
2. 查询执行函数
目的:在query() 的基础上得到最终的数据
语法:db.session.query(Models).函数名()
all(): 以列表的方式返回query对象中所有的查询数据
first(): 返回query对象中的第一个查询结果,如果没有结果,返回None
first_or_404(): 返回query对象中的第一个查询结果,如果没有结果的话则终止查询并响应404
count(): 返回query查询结果中的数量
3. 查询过滤器函数
作用:专门对数据进行筛选,返回部分行数据
语法: db.session.query().过滤器函数().执行函数()
filter() 按指定条件进行过滤(单表,多表,定值,不定值)
filter_by() 按等值条件进行过滤
limit() 按限制行数量获取结果
order_by() 按指定列进行排序
group_by() 按指定条件进行分组
聚合函数
4.过滤器函数详解
filter()
注意:条件必须由 实体类.属性 组成
1.查询年龄大于 30 的人的信息
db.session.query(Users).filter(User.age > 30).all()
2.查询id为1的人的信息
db.session.query(Users).filter(Users.id==1).first()
3.查询年龄大于30并且id大于1的用户的信息
filter(条件1,条件2,...)
db.session.query(Users).filter(Users.age > 30, id>1).all()
4.查询年龄大于30或者id为1的用户的信息
查询或者操作,需要使用 or_()
db.session.query(Users).filter(or_(Users.id == 1, Users.age > 30)).all()
5.查询 email 中包含 'w' Users的信息--模糊查询
db.session.query(Users).filter(Users.email.like('%w%'))
6.查询 id 在 [2,4] 列表中的Users的信息
users = db.session.query(Users).filter(Users.id.in_([2, 4])).all()
7.查询Users中age在40-50之间的人的信息 between 45 and 50
users = db.session.query(Users).filter(Users.age.between(40,50)).all()
filter_by()
注意:只能做等值判断,不能做不等值
查询 id 为1 的 users 的信息
db.session.query(Users).filter_by(id=1).first()
limit()
1.获取users表中的前两条数据
db.session.query(Users).limit(2).all()
2.获取 users 表中过滤前 3 条数据后剩余的前2条数据
db.session.query(Users).limt(2).offset(3).all()
order_by()
按照 id 倒序排序
select * from users order by id desc;
先按照年龄倒序排序,再按照id升序排序
select * from user order by age desc, id asc
db.session.query(Users).order_by('age desc, id asc').all()
group_by()
1.将 users 表中的数据按照 age 进行分组
select * from users groupby age
db.session.query(Users.age).group_by('age').all()
聚合函数
- func.avg(): 求平均值
- func.sum(): 求和
- func.max(): 求最大值
- func.min(): 求最小值
- func.count(): 求不为空的数量
1.查询users表中所有人的平均年龄
select avg(age) from users;
# 模型类中查询写法
from sqlalchemy import func
db.session.query(func.avg(Users.age)).all()
2.users表中,按年龄分组,再查每组的年龄平均值
select age, avg(age) from users group by age
# 模型类中查询写法
db.session.query(func.avg(Users.age)).group_by('age').all()
基于 Models 类进行查询(适用于单表查询)
语法:Models.query.查询执行函数()
查询执行函数同上