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()

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐