Flask——sqlalchemy数据库查询
常用的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
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24