查询的两种方式
db.session.query(类名).all() ##通过session上下文
类名.query.all() ##通过类名
排序,默认升序
for emp in Employee.query.order_by(Employee.salary).all():
print(emp)
查询指定字段
for n,s in db.session.query(Employee.name,Employee.salary):
print(n,s)
for row in db.session.query(Employee.name,Employee.salary):
print(row[0],row.salary) #内部封装的named tuple ,既可通过下标访问也可以通过打点字段名访问
for row in db.session.query(Employee.salary.label('薪水')):
print(row.薪水) ##给字段名换个标签
选择查询的条数
for emp in Employee.query.limit(5):
print(emp) ##获取前五条
for emp in Employee.query.offset(10).limit(5):
print(emp) ##跳过前十条
过滤
db.session.query(Employee).filter_by(name='***') #通过sql语法实现,关键字加值
db.session.query(Employee).filter(Employee.name=='***') ##通过python面向对象的语法
filter语法过滤方法
db.session.query(Employee).filter(Employee.name.startswith('***')) ##以**开头
db.session.query(Employee).filter(Employee.name.contains('***')) ##包含**
db.session.query(Employee).filter(Employee.name.endswith('***')) ##以**结尾
db.session.query(Employee).filter(Employee.salary>5000).filter(Employee.name=='**')##多个条件过滤
db.session.query(Employee).filter(Employee.name.like('%陈%'))#模糊查询,'陈%','%陈%','%陈'
范围
db.session.query(Department).filter(Department.name.in_(['技术部','人事部']))#查询部门名称为人事部和技术部的
db.session.query(Department).filter(~Department.name.in_['技术部','人事部'])#查询部门名称不为人事部和技术部的
db.session.query(Department).filter(Department.name.is_('技术部')) #查询部门名称是技术部的