sqlalchemy复杂查询
这章节要操作的数据

多条件查询,可以在表达式中各种and,ro方式进行查询
| from sqlalchemy.orm import sessionmaker |
| from sqlalchemy import create_engine |
| from sqlalchemy.sql import text |
| from s1 import modelsengine = create_engine('sqlite:///test.db') |
| Session = sessionmaker(bind=engine) |
| session = Session()row1 = session.query(models.Users).filter(text("nid>:value or age>:age")).params(value=9,age=30).all() |
| row_list = [row.name for row in row1] |
| print(row_list)try:session.commit() |
| except Exception as e:print(e)session.close() |
| ['警皇', '猪皇', '沙加特', '春丽', '桑切尔夫', '隆', '肯', '豪鬼', '骨裂'] |
between函数,查询某一列和某一列之间的数据
| from sqlalchemy.orm import sessionmaker |
| from sqlalchemy import create_engine |
| from sqlalchemy.sql import text |
| from s1 import modelsengine = create_engine('sqlite:///test.db') |
| Session = sessionmaker(bind=engine) |
| session = Session()row1 = session.query(models.Users).filter(models.Users.name.between('春丽','骨裂')).all() |
| row_list = [row.name for row in row1] |
| print(row_list) |
| try:session.commit() |
| except Exception as e:print(e)session.close() |
| ['春丽', '桑切尔夫', '沙加特', '猪皇', '肯', '警皇', '豪鬼', '阿比盖尔', '隆', '骨裂'] |
查询包含与不包含
| from sqlalchemy.orm import sessionmaker |
| from sqlalchemy import create_engine |
| from sqlalchemy.sql import text |
| from s1 import modelsengine = create_engine('sqlite:///test.db') |
| Session = sessionmaker(bind=engine) |
| session = Session() |
| row1 = session.query(models.Users).filter(models.Users.nid.in_([8,9])).all() |
| row_list = [row.name for row in row1] |
| print(row_list) |
| row1 = session.query(models.Users).filter(~models.Users.nid.in_([8,9])).all() |
| row_list = [row.name for row in row1] |
| print(row_list)try:session.commit() |
| except Exception as e:print(e) |
| session.close() |
| ['阿比盖尔', '嘉米', '小樱02', '劳拉02', '沙加特', '春丽', '桑切尔夫', '隆', '肯', '豪鬼', '骨裂'] |
查询嵌套
| from sqlalchemy.orm import sessionmaker |
| from sqlalchemy import create_engine |
| from sqlalchemy.sql import text |
| from s1 import modelsengine = create_engine('sqlite:///test.db') |
| Session = sessionmaker(bind=engine) |
| session = Session() |
| |
| row1 = session.query(models.Users).filter(models.Users.nid.in_(session.query(models.Users.nid).filter(models.Users.age==35))).all() |
| row_list = [row.name for row in row1] |
| print(row_list)try:session.commit() |
| except Exception as e:print(e)session.close() |
| ['桑切尔夫', '骨裂'] |
上面说到了使用or,and的用法,但只是编写表达式,并不是面向对象
下面示例是使用面向对象的方式
| from sqlalchemy.orm import sessionmaker |
| from sqlalchemy import create_engine |
| from sqlalchemy.sql import text |
| from s1 import models |
| from sqlalchemy import and_,or_engine = create_engine('sqlite:///test.db') |
| Session = sessionmaker(bind=engine) |
| session = Session() |
| row1 = session.query(models.Users).filter(and_(models.Users.nid>9,models.Users.age<30)) |
| row_list = [row.name for row in row1] |
| print(row_list) |
| row1 = session.query(models.Users).filter(or_(models.Users.gender==True,models.Users.age<30)) |
| row_list = [row.name for row in row1] |
| print(row_list) |
| row1 = session.query(models.Users).filter(or_(models.Users.gender==True,and_(models.Users.nid>1,models.Users.age.between(20,30))) |
| ).all() |
| row_list = [row.name for row in row1] |
| print(row_list)try:session.commit() |
| except Exception as e:print(e)session.close() |
| ['春丽', '肯'] |
| ['阿比盖尔', '嘉米', '小樱02', '劳拉02', '春丽', '肯'] |
| ['嘉米', '小樱02', '劳拉02', '春丽', '隆', '肯'] |
分页
| from sqlalchemy.orm import sessionmaker |
| from sqlalchemy import create_engine |
| from sqlalchemy.sql import text |
| from s1 import models |
| from sqlalchemy import and_,or_engine = create_engine('sqlite:///test.db') |
| Session = sessionmaker(bind=engine) |
| session = Session() |
| |
| row1 = session.query(models.Users).offset(2).limit(3) |
| row_list = [row.name for row in row1] |
| print(row_list)try:session.commit() |
| except Exception as e:print(e)session.close() |
| ['小樱02', '劳拉02', '警皇'] |
模糊查询
| from sqlalchemy.orm import sessionmaker |
| from sqlalchemy import create_engine |
| from sqlalchemy.sql import text |
| from s1 import models |
| from sqlalchemy import and_,or_engine = create_engine('sqlite:///test.db') |
| Session = sessionmaker(bind=engine) |
| session = Session() |
| row1 = session.query(models.Users).filter(models.Users.age.like("3%")).all() |
| row_list = [row.name for row in row1] |
| print(row_list)try:session.commit() |
| except Exception as e:print(e)session.close() |
| ['劳拉02', '猪皇', '桑切尔夫', '隆', '骨裂'] |
排序
| from sqlalchemy.orm import sessionmaker |
| from sqlalchemy import create_engine |
| from sqlalchemy.sql import text |
| from s1 import models |
| from sqlalchemy import and_,or_engine = create_engine('sqlite:///test.db') |
| Session = sessionmaker(bind=engine) |
| session = Session() |
| |
| row1 = session.query(models.Users).order_by(models.Users.age.asc()) |
| row_list = [row.name for row in row1] |
| print(row_list) |
| |
| row1 = session.query(models.Users).order_by(models.Users.age.desc()) |
| row_list = [row.name for row in row1] |
| print(row_list) |
| try:session.commit() |
| except Exception as e:print(e)session.close() |
| ['阿比盖尔', '嘉米', '小樱02', '春丽', '肯', '劳拉02', '隆', '桑切尔夫', '骨裂', '猪皇', '沙加特', '豪鬼', '警皇'] |
| ['警皇', '沙加特', '豪鬼', '猪皇', '桑切尔夫', '骨裂', '劳拉02', '隆', '肯', '春丽', '小樱02', '嘉米', '阿比盖尔'] |
聚合函数
| from sqlalchemy.orm import sessionmaker |
| from sqlalchemy import create_engine |
| from sqlalchemy.sql import text, func |
| from s1 import models |
| from sqlalchemy import and_, or_engine = create_engine('sqlite:///test.db') |
| Session = sessionmaker(bind=engine) |
| session = Session() |
| ret = session.query(func.sum(models.Users.age), |
| ).first() |
| print(ret)try:session.commit() |
| except Exception as e:print(e)session.close() |
分组
| from sqlalchemy.orm import sessionmaker |
| from sqlalchemy import create_engine |
| from sqlalchemy.sql import text, func |
| from s1 import models |
| from sqlalchemy import and_, or_engine = create_engine('sqlite:///test.db') |
| Session = sessionmaker(bind=engine) |
| session = Session() |
| ret = session.query(func.count(models.Users.name)).group_by(models.Users.gender).all() |
| print('男:',ret[0][0],'个') |
| print('女:',ret[1][0],'个') |
| try:session.commit() |
| except Exception as e:print(e)session.close() |
| 男: 9 个 |
| 女: 4 个 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2022-08-01 选课系统前戏