SQLAlchemy 查询示例
1. 限制查询返回结果
print(session.query(User).filter(User.username != 'jingqi').limit(2).all())
print(session.query(User).filter(User.username != 'jingqi').offset(2).all())
print(session.query(User).filter(User.username != 'jingqi').slice(2, 3).all())
2. 排序之后再进行限制
from sqlalchemy import desc
print(session.query(User).filter(User.username != 'budong').order_by(User.username).all())
print(session.query(User).filter(User.username != 'budong').order_by(desc(User.username)).slice(1, 3).all())
3. 不等于查询
print(session.query(User).filter(User.username != 'jingqi').all())
4. 模糊匹配
print(session.query(User).filter(User.username.like('jingqi')).all())
print(session.query(User).filter(User.username.notlike('jingqi')).all())
5. 成员属于和不属于查询
print(session.query(User).filter(User.username.in_(['jingqi', 'jingqi1'])).all())
print(session.query(User).filter(User.username.notin_(['jingqi', 'jingqi2'])).all())
6. 空判断
print(session.query(User).filter(User.username == None).all())
print(session.query(User).filter(User.username.is_(None)).all())
print(session.query(User).filter(User.username.isnot(None)).all())
7. 多条件查询
print(session.query(User).filter(User.username.isnot(None), User.password == 'qwe123').all())
8. 选择条件
from sqlalchemy import or_, and_
print(session.query(User).filter(or_(User.username == 'jingqi', User.password == 'qwe123')).all())
print(session.query(User).filter(and_(User.username == 'jingqi2', User.password == '111')).all())
9. 字符串开头和结尾匹配
endwith_g = session.query(User).filter(User.name.endswith("g")).all()
print(endwith_g)
startwith_z = session.query(User).filter(User.name.startswith("z")).all()
print(startwith_z)
10. 分页查询
ret = session.query(User).paginate(2, 3)
print(ret.page)
print(ret.items)
11. 聚合函数
from sqlalchemy import func
print(session.query(User.password, func.count(User.id)).group_by(User.password).all())
print(session.query(User.password, func.count(User.id)).group_by(User.password).having(func.count(User.id) > 1).all())
print(session.query(User.password, func.sum(User.id)).group_by(User.password).all())
print(session.query(User.password, func.max(User.id)).group_by(User.password).all())
print(session.query(User.password, func.min(User.id)).group_by(User.password).all())
from sqlalchemy.sql import extract
print(session.query(extract('minute', User.creatime).label('minute'), func.count('*').label('count')).group_by('minute').all())
print(session.query(extract('day', User.creatime).label('day'), func.count('*').label('count')).group_by('day').all())
13. 多表查询
内连接
for u, a in session.query(User, Address).filter(User.id == Address.user_id).filter(Address.email_address == 'jack@google.com').all():
print(u)
print(a)
print(session.query(User.username, UserDetails.lost_login).join(UserDetails, UserDetails.id == User.id).all())
左连接
print(session.query(User.username, UserDetails.lost_login).outerjoin(UserDetails, UserDetails.id == User.id).all())
子查询
sql_0 = session.query(UserDetails.lost_login).subquery()
print(session.query(User).filter((User.creatime > all_(sql_0))).all())
print(session.query(User).filter((User.creatime > any_(sql_0))).all())
14. 原生 SQL 查询
sql_1 = """
SELECT * FROM user
"""
row = session.execute(sql_1)
print(row, dir(row))
print(row.fetchone())
print(row.fetchmany())
print(row.fetchall())
for i in row:
print('===', i)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本