• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Flask——sqlalchemy数据库查询

武飞扬头像
活动的笑脸
帮助1

常用的SQLAlchemy查询执行器

方法 说明
all() 以列表形式返回查询的所有结果
first() 返回查询的第一个结果,如果未查到,返回None
first_or_404() 返回查询的第一个结果,如果未查到,返回404
get() 返回指定主键对应的行,如不存在,返回None
get_or_404() 返回指定主键对应的行,如不存在,返回404
count() 返回查询结果的数量
paginate() 返回一个Paginate对象,它包含指定范围内的结果

查询执行器的使用方法:

第一种方法

获取第一个数据:

    # 获取第一行数据
    result = Role.query.first()
    print(result)
    # 获取对应属性
    print(result.name)
# 结果为:<Role 1>  admin

获取指定一行数据:

    # 精确获取一行数据
    result = Role.query.get(2)
    print(result)
    # 获取对应属性
    print(result.name)
# 结果为:<Role 2>  stuff

获取全部数据

    # 获取多行数据
    result = Role.query.all()
    print(result)
    # 获取对应属性
    print(result[0].name, result[1].name)
# 结果为:[<Role 1>, <Role 2>]   admin stuff

第二种方法:

获取第一个数据:

    # 获取第一行数据
    result = db.session.query(User).first()
    print(result)
    # 获取对应属性
    print(result.name)
# 结果为:<User 1>   zhangsan

获取指定一行数据:

    # 精确获取一行数据
    result = db.session.query(User).get(2)
    print(result)
    # 获取对应属性
    print(result.name)
# 结果为:<User 2>  lisi

获取全部数据

    # 获取多行数据
    result = db.session.query(User).all()
    print(result)
    # 获取对应属性
    print(result[0].name, result[1].name)
# 结果为:[<User 1>, <User 2>, <User 3>, <User 4>]    zhangsan 234@234.com 345 2

常用的SQLAlchemy查询过滤器

过滤器 说明
filter() 把过滤器添加到原查询上,返回一个新查询
filter_by() 把等值过滤器添加到原查询上,返回一个新查询
limit 使用指定的值限定原查询返回的结果
offset() 偏移原查询返回的结果,返回一个新查询
order_by() 根据指定条件对原查询结果进行排序,返回一个新查询
group_by() 根据指定条件对原查询结果进行分组,返回一个新查询

精确查询,即根据且条件把对应的数据返回,如下:

"""
精准查询
"""
user_result = User.query.filter_by(name="zhangsan").all()
print(user_result )

user_result = User.query.filter_by(name="zhangsan").first()
print(user_result )
print(user_result .name, user_result .email, user_result .passward, user_result .role_id)

# 多条件查询, filter_by里的条件是且的关系
user_result = User.query.filter_by(name="zhangsan", passward=123).first()
print(user_result )
# 结果为:[<User 1>]    <User 1>    zhangsan 123@123.com 123 1    <User 1>

模糊查询,即可以使用且,或等关系条件把对应的数据返回,这里要导入from sqlalchemy import or_,如下:

"""
模糊查询
"""
# 多条件查询, filter里的条件是且的关系
user_result = User.query.filter(User.name=="lisi", User.role_id==1).first()
print(user_result )

# 多条件查询, filter里的条件是或的关系(需先引入or_函数)
user_result = User.query.filter(or_(User.name=="lisi", User.passward==123)).all()
print(user_result )
# 结果为:<User 2>    [<User 1>, <User 2>]

偏移查询,即跳过某些数据后再获取对应的数据,如下:

"""
偏移查询
"""
user_result = User.query.offset(2).first()
print(user_result .name, user_result .passward)
# 结果为:wangwu 345

根据指定条件对原查询结果进行排序,返回一个新查询,如下:

"""
根据指定条件对原查询结果进行排序,返回一个新查询
"""
# 返回结果(正序), 默认正序,asc()为正序排列
user_result = User.query.order_by(User.id.asc()).all()
print(user_result )

# 返回结果(倒序),desc()为倒序排列
user_result = User.query.order_by(User.id.desc()).all()
print(user_result )
# 结果为:[<User 1>, <User 2>, <User 3>, <User 4>]    [<User 4>, <User 3>, <User 2>, <User 1>]

根据指定条件对原查询结果进行分组,返回一个新查询,这里要导入from sqlalchemy import func,如下:

"""
根据指定条件对原查询结果进行分组,返回一个新查询
"""
user_result = db.session.query(User.role_id, func.count(User.role_id)).group_by(User.role_id).all()
print(user_result )
# 结果为:[(1, 2), (2, 2)]
# 这里较难,解释为:以User.role_id为对象进行分组,返回结果格式为(User.role_id,User.role_id的数量)

完整代码如下:

# 从de_demo.py导入全部
from db_demo import *

# 引入或的关系查询
from sqlalchemy import or_

# 使用group_by()
from sqlalchemy import func

def a():
    # 获取多行数据
    result = Role.query.all()
    print(result)
    # 获取对应属性
    print(result[0].name, result[1].name)

def b():
    # 获取第一行数据
    result = Role.query.first()
    print(result)
    # 获取对应属性
    print(result.name)

def c():
    # 精确获取一行数据
    result = Role.query.get(2)
    print(result)
    # 获取对应属性
    print(result.name)

def d():
    # 获取多行数据
    result = db.session.query(User).all()
    print(result)
    # 获取对应属性
    print(result[0].name, result[1].email, result[2].passward, result[3].role_id)

def e():
    # 获取第一行数据
    result = db.session.query(User).first()
    print(result)
    # 获取对应属性
    print(result.name)

def f():
    # 精确获取一行数据
    result = db.session.query(User).get(2)
    print(result)
    # 获取对应属性
    print(result.name)

def h():
    """
    精准查询
    """
    user_result = User.query.filter_by(name="zhangsan").all()
    print(user_result)

    user_result = User.query.filter_by(name="zhangsan").first()
    print(user_result)
    print(user_result.name, user_result.email, user_result.passward, user_result.role_id)

    # 多条件查询, filter_by里的条件是且的关系
    user_result = User.query.filter_by(name="zhangsan", passward=123).first()
    print(user_result)

def i():
    """
    模糊查询
    """
    # 多条件查询, filter里的条件是且的关系
    user_result = User.query.filter(User.name == "lisi", User.role_id == 1).first()
    print(user_result)

    # 多条件查询, filter里的条件是或的关系(需先引入or_函数)
    user_result = User.query.filter(or_(User.name == "lisi", User.passward == 123)).all()
    print(user_result)

def j():
    """
    偏移查询
    """
    user_result = User.query.offset(2).first()
    print(user_result.name, user_result.passward)

def k():
    """
    根据指定条件对原查询结果进行排序,返回一个新查询
    """
    # 返回结果(正序), 默认正序,asc()为正序排列
    user_result = User.query.order_by(User.id.asc()).all()
    print(user_result)

    # 返回结果(倒序),desc()为倒序排列
    user_result = User.query.order_by(User.id.desc()).all()
    print(user_result)

def l():
    """
    根据指定条件对原查询结果进行分组,返回一个新查询
    """
    user_result = db.session.query(User.role_id, func.count(User.role_id)).group_by(User.role_id).all()
    print(user_result)
    # 这里较难,解释为:以User.role_id为对象进行分组,返回结果格式为(User.role_id,User.role_id的数量)


if __name__ == '__main__':
    pass
    # 查看哪个功能可调用对应函数,如:a()
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaheic
系列文章
更多 icon
同类精品
更多 icon
继续加载