sqlalchemy查询语句总结

sqlalchemy查询语句总结

查询
1.FLASK-SQLALCHEMY - 查询
1.基于 db.session 进行查询

	1.db.session.query()
		该函数会返回一个Query对象,类型为 BaseQuery,包含了指定实体类对应的表中所有的数据
		该函数也可以接受多个参数,参数表示的是要查询哪个实体

2.查询执行函数

		目的:在查询的基础上得到最终想要的结果
		语法:db.session.query(...).查询执行函数()

也可以直接使用定义的类来查询:
例:Users.query.all()
Users.query.first()
。。。。。

		函数         说明
 all()        以列表的方式返回查询的所有结果
 first()      返回查询中的第一个结果,如果没有结果,则返回None
first_or_404()  返回查询中的第一个结果,如果没有结果,则终止并返回404
count()      返回查询结果的数量
get()      根据主键获取到对象,


	3.查询过滤器函数
		作用:在查询的基础上,筛选部分列出来
		语法:db.session.query(..).过滤器函数().查询执行函数()
		过滤器函数:
		函数                说明
filter()            按指定条件进行过滤(多表,单表,定值,不定值..)
filter_by()         按等值条件进行过滤
limit()             按限制行数获取
order_by()          根据指定条件进行排序
group_by()          根据指定条件进行分组
offset()      跳过几条开始查,例:db.session.query.offset(2).all()  #跳过前两条,开始查



db.session.query.offset(1).limit(2).all()  # 跳过一条,取出两条数据

User.query.order_by(User.id.desc()).all()  # 按照id进行降序的方式,查出,默认升序,函数asc()






		详解:
		1.filter()
			1. 查询年龄 大于 30 的Users 的信息
				db.session.query(Users).filter(Users.age>30).all()
				注意:条件必须由 模型类.属性 来组成
			2.查询年龄 大于 30 且 id 大于5 的Users的信息
				db.session.query(Users).filter(Users.age>30,Users.id > 5).all()
			3.查询年龄大于30 或者 id大于5 的Users的信息
				注意:查询 或 的操作,要借助 or_(),    
or_() 函数需要导入  from sqlalchemy import or_
				db.session.query(Users).filter(or_(条件1,条件2)).all()

			4.查询id等于5的Users的信息
				注意:等值判断必须使用 ==
				db.session.query(Users).filter(Users.id==5).first()

			5.查询 email 中包含 'w' 的users的信息 - 模糊查询 like
				db.session.query(Users).filter(Users.email.like('%w%')).all()

			6.查询 id 在 [1,2,3] 之间的 Users 的信息
				db.session.query(Users).filter(Users.id.in_([1,2,3])).all()

		2.filter_by()
			1.查询 id=5的Users的信息
				db.session.query(Users).filter_by(id=5).first()
  1. 写入多个条件:
    db.session.query(Users).filter_by(id=5,name=“wht”).first()

     	3.limit()
     		1.在整个查询结果中获取前5条数据	
     			db.session.query(Users).limit(5).all()
    

    db.session.query(Users).limit(5).all()
    db.session.query(Users).limit(3).offset(1).all()
    offset() 表示行数偏移量,这里就是从多少开始查询

     	4.order_by()
     		1.对Users表中所有的数据按id倒序排序
     			db.session.query(Users).order_by('id desc').all()
    

    desc 表示倒序,默认为升序
    倒序:从大到小
    若指定的字段中有重复的,还可以指定二级排序
    db.session.query(Users).order_by(‘id desc,age asc’).all()
    按照id倒序排列,年龄升序排列

    db.session.query(Users).order_by(Users.id.desc()).all()
    注意:新版本

     	5.group_by()
     按照年龄进行分组
     db.session.query(Users.age).group_by('age').all()
    
     from sqlalchemy import func
     db.session.query(Users.age,func.count(Users.age)).group_by(Users.age).all()
     # 按照年龄进行分组,得出每个年龄的人数
     # func中有很多数学上的函数
    

查询语句

常用语句总结

print(session.query(User).get({'id': 1}))                               # 根据id获取一条数据
print(session.query(User).filter(User.id == 1).one())                   # 查询符合条件的任何一条记录
print(session.query(User).filter(User.id == 1).first())                 # 查询返回的第一条记录
print(session.query(User).filter_by(id=1).all())                        # 查询返回符合条件的左右记录
print(session.query(User).filter(User.id == 1).first().user_name)       # 如果未查询到数据,则会抛出异常
print(session.query(User).filter_by(user_name='test2').limit(2).all())  # 限制最多返回2条记录
print(session.query(User).filter_by(user_name='test2').offset(1).all()) # 从查询到的第二条记录开始返回
print(session.query(User).filter(or_(User.id == 1, User.id == 2)).all()) # or_多条件查询
print(session.query(User).filter(User.id.in_((1, 2))).all())             # in多条件查询
print(session.query(User).filter(not_(User.id == 1)).all())             # not_非条件过滤
print(session.query(func.count('*')).select_from(User).scalar())        # 使用查询传递函数统计
print(session.query(func.count(User.id)).scalar())                      # 使用查询传递函数统计
print(session.query(User).filter(User.user_name.like('%xx%')))          # 模糊匹配查询
print(session.query(User).filter(User.id == 1).scalar().user_name)      # 如果有记录,返回第一条记录的第一个元素
 
# 排序
all_users = session.query(User).order_by('user_name').all()             # 根据user_name排序
all_users = session.query(User).order_by(User.user_password).all()      # 根据user_password排序
all_users = session.query(User).order_by(User.user_password.desc()).all()  # 根据user_password降序排序
all_users = session.query(User).order_by(User.user_name, User.user_password).all() # user_name升序,user_password降序排序
 
# 连接
print(session.query(User).join(Admin, User.id == Admin.id).filter().all())  # 内连接,如果没有外键的话,也可以手动指定关联外键
print(session.query(User).outerjoin(Admin).filter().all())                  # 左外连接,此处Admin必须有字段为User的外键
 
# 插入sql语句进行查询
session.query(User).filter(text("id<:value and name=:name")).\
...     params(value=224, name='fred').order_by(User.id).one()



# contains() 模糊查询,查询的数据中包含west字符串
emps = session.query(EmpMaster).filter(EmpMaster.EMAIL.contains('west')).all()


# having是对查找结果进一步过滤。比如只想要看未成年人的数量,那么可以首先对年龄进行分组统计人数,然后再对分组进行having过滤。
result = session.query(User.age,func.count(User.id)).group_by(User.age).having(User.age >= 18).all()


查询名字结尾字符为g的所有数据[开始/包含]
        User.query.filter(User.name.endswith('g')).all()
        User.query.filter(User.name.startswith('g')).all()
        User.query.filter(User.name.contains('g')).all()

data=db.session.query(wei_pin_hui_1.shi_yong_ren_qun,wei_pin_hui_1.feng_ge,func.count(wei_pin_hui_1.feng_ge)).filter(or_(wei_pin_hui_1.shi_yong_ren_qun.contains('青年'),wei_pin_hui_1.shi_yong_ren_qun.contains('青少年'))).group_by(wei_pin_hui_1.shi_yong_ren_qun).group_by(wei_pin_hui_1.feng_ge).all()
print(data)

python_flask_ORM
SQLAlchemy ORM查询常见筛选条件的表示方法
https://haofly.net/sqlalchemy/

jinjia2模板

jinjia2文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值