Flask 使用ORM模型对数据库进行增删改查
一起使用,用于过滤分组后的结果。根据一个或多个列进行排序。根据一个或多个列进行分组。去除查询结果中的重复记录。
·
Flask-SQLAlchemy数据的增、删、改、查:
1.增
#1.创建ORM对象
user = User(username="test1",password="123456")
#2.将ORM对象添加到db.session中
db.session.add(user)
#3.将db.session中的改变同步到数据库中
db.session.commit()
2.查询
#1.get查找,根据主键id查找
user = User.query.get(1)
print(user.id,user.username,user.password)
#2.filter_by查找
users = User.query.filter_by(username="test1") #users是一个类数组
print(type(users))
for user in users:
print(user.username)
3.改
user = User.query.filter_by(username="test1").first() #用frist()如果数据为空返回None,用[0]如果没有数据会报错
user.password = "111111" #更新密码为111111
db.session.commit()
4.删
# 1.get查找,根据主键id查找
user = User.query.get(1)
print(user.id, user.username, user.password)
# 2.从db.session中删除
db.session.delete(user)
# 3.将db.session中的改变同步到数据库中
db.session.commit()
5.常用查询过滤器
5.1 filter() 和 filter_by()
filter()
:使用 SQL 表达式进行过滤。filter_by()
:通过关键字参数进行过滤,比filter()
更简单直观,但功能较受限。
# 使用 filter
User.query.filter(User.username == 'admin').all()
# 使用 filter_by
User.query.filter_by(username='admin').all()
5.2 order_by()
根据一个或多个列进行排序。
User.query.order_by(User.username.asc()).all() # 升序
User.query.order_by(User.username.desc()).all() # 降序
5.3 limit() 和 offset()
limit()
:限制查询结果的数量。offset()
:跳过指定数量的结果,通常与limit()
一起使用进行分页。
User.query.limit(10).all() # 获取前10个用户
User.query.offset(10).limit(10).all() # 跳过前10个,获取接下来的10个用户
5.4 group_by()
根据一个或多个列进行分组。
from sqlalchemy import func
User.query.group_by(User.department).count() # 按部门分组计数
5.5 having()
与 group_by()
一起使用,用于过滤分组后的结果。
from sqlalchemy import func
User.query.group_by(User.department).having(func.count(User.id) > 1).all()
5.6 join() 和 outerjoin()
join()
:内连接。outerjoin()
:外连接。
Post.query.join(User, Post.author_id == User.id).filter(User.username == 'admin').all()
5.7 distinct()
去除查询结果中的重复记录。
Post.query.with_entities(Post.title).distinct().all()
5.8 contains()、like()、ilike()(SQLAlchemy 表达式)
用于模糊查询。
from sqlalchemy import or_
User.query.filter(User.username.like('%admin%')).all()
更多推荐
已为社区贡献3条内容
所有评论(0)