连接数据库准备
| from sqlalchemy.orm import sessionmaker |
| from sqlalchemy import create_engine |
| from sqlalchemy.orm import scoped_session |
| from models import Users,Person,Hobby,Boy,Girl |
| from sqlalchemy.sql import text |
| |
| engine = create_engine("mysql+pymysql://root:1234@127.0.0.1:3306/sqlalchemy01", max_overflow=0, pool_size=5) |
| Session = sessionmaker(bind=engine) |
| session = scoped_session(Session) |
1 filter_by(写条件)
| ret = session.query(Users).filter_by(name='xxx').all() |
| print(ret) |
2 and条件连接
| ret = session.query(Users).filter(Users.id > 1, Users.name == 'xxx').all() |
| print(ret) |
3 between条件连接
| |
| |
| |
| ret = session.query(Users).filter(Users.id.between(4, 10), Users.name == 'xxx') |
| print(ret) |
4 in 条件
| ret = session.query(Users).filter(Users.id.in_([1,4,5])).all() |
| print(ret) |
5 ~ (非,除...外)
| ret = session.query(Users).filter(~Users.id.in_([1,3,4])).all() |
| print(ret) |
6 二次筛选
| |
| |
| |
| ret = session.query(Users).filter(Users.id.in_(session.query(Users.id).filter_by(name='xxx'))).all() |
| print(ret) |
7 and 和 or 条件
| |
| from sqlalchemy import and_, or_ |
| |
| ret = session.query(Users).filter(and_(Users.id > 3, Users.name == 'xxx')).all() |
| |
| ret = session.query(Users).filter(Users.id > 3, Users.name == 'xxx').all() |
| |
| |
| |
| |
| ret = session.query(Users).filter(or_(Users.id <= 2, Users.name == 'xxx')).all() |
| |
| |
| |
| |
| ret = session.query(Users).filter( |
| or_( |
| Users.id < 2, |
| and_(Users.name == 'xxx', Users.id > 3), |
| Users.extra != "" |
| )) |
8 like 查询
| |
| |
| |
| ret = session.query(Users).filter(Users.name.like('l%')).all() |
| |
| ret = session.query(Users).filter(~Users.name.like('l%')).all() |
9 限制,用于分页,区间
| ret = session.query(Users)[1:2] |
10 排序,根据name降序排列(从大到小)
| ret = session.query(Users).order_by(Users.name.desc()).all() |
| ret = session.query(Users).order_by(Users.name.asc()) |
| ret = session.query(Users).order_by(Users.name).all() |
| |
| |
| ret = session.query(Users).order_by(Users.name.desc(), Users.id.asc()).all() |
11 分组
| |
| from sqlalchemy.sql import func |
| |
| |
| |
| ret = session.query(Users.name).group_by(Users.name).all() |
| |
| |
| ret = session.query( |
| func.max(Users.id), |
| func.sum(Users.id), |
| func.min(Users.id), |
| func.count(Users.id), |
| Users.name |
| ).group_by(Users.name).all() |
| |
| |
| |
| |
| |
| ret = session.query( |
| func.max(Users.id), |
| func.sum(Users.id), |
| func.min(Users.id), |
| func.count(Users.id), |
| Users.name |
| ).filter(Users.id>2).group_by(Users.name).having(func.min(Users.id) >2) |
12 连表(默认用forinkey关联)
| |
| |
| |
| ret = session.query(Person, Hobby).filter(Person.hobby_id == Hobby.id).all() |
| |
| |
| |
| |
| |
| ret = session.query(Person).join(Hobby).all() |
| |
| |
| |
| |
| |
| ret = session.query(Person).join(Hobby, isouter=True).all() |
| ret = session.query(Hobby).join(Person, isouter=True).all() |
| |
| |
| |
| |
| |
| ret = session.query(Person).join(Hobby,Person.id==Hobby.id, isouter=True) |
13 union和union all
| |
| |
| q1 = session.query(Boy.id,Boy.name).filter(Boy.id > 1) |
| q2 = session.query(Girl.id,Girl.name).filter(Girl.id < 10) |
| ret = q1.union(q2).all() |
| |
| q1 = session.query(Boy.name).filter(Boy.id > 1) |
| q2 = session.query(Girl.name).filter(Girl.id < 10) |
| ret = q1.union_all(q2).all() |
| print(ret) |
| |
| |
| session.commit() |
| |
| session.close() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探