时间:2021-07-01 10:21:17 帮助过:20人阅读
from data.user_modules import User,session,UserDetails #带条件查询 raw=session.query(User).filter_by(username=‘nanian‘).all() raw=session.query(User).filter_by(username=‘nanian‘) #去掉.all()原生sql raw=session.query(User).filter(User.username ==‘nanian‘).all() raw=session.query(User.username).filter(User.username !=‘nanian‘).all() raw=session.query(User.username).filter(User.username !=‘nanian‘).first() raw=session.query(User.username).filter(User.username !=‘nanian‘).one() #如果前面查出的是多条数据则报错 print(session.query(User).get(2)) #根据主键查,会自己找主键 print(raw) #限制查询结果数 print(session.query(User).filter(User.username!=‘nanian‘).limit(3).all())#前三行 print(session.query(User).filter(User.username!=‘nanian‘).offset(3).all())#第三行以后 print(session.query(User).filter(User.username!=‘nanian‘).slice(1,3).all())#2,3行 #排序 from sqlalchemy import desc raw=session.query(User).filter(User.username !=‘nanian‘).order_by(User.username).all() raw=session.query(User).filter(User.username !=‘nanian‘).order_by(desc(User.username).all()#逆序 #模糊查询 尽量少用模糊查询,效率低 from sqlalchemy import or_ raw=session.query(User).filter(User.username!=‘nanian‘).all() raw=session.query(User).filter(User.username.like(‘n%‘).all() raw=session.query(User).filter(User.username.notlike(‘n%‘).all() raw=session.query(User).filter(User.username.in_([‘nanian‘,‘a‘]).all()) #加下划线表示和python关键字作区分 raw=session.query(User).filter(User.username.isnot(None),User.passwd==‘123‘).all()) #多条件 raw=session.query(User).filter(or_(User.username.isnot(None),User.passwd==‘123‘)).all()) #或 raw=session.query(User).filter(User.username==None).all()) #聚合函数 from sqlalchemy import func,extract print(session.query(User.passwd,func.count(User.id)).group_by(User.passwd).all()) print(session.query(User.passwd,func.count(User.id)).group_by(User.passwd). having(func.count(User.id)>1) all()) print( session.query(extract(‘minute‘,User.createtime).label(‘minute‘), func.count(User.id)).group_by(‘minute‘).all() ) #提取分钟,按分钟分组 #多表查询 raw=session.query(User,UserDetails).all() raw=session.query(User,UserDetails).filter(UserDetails.id==User.id) all()# cross join raw=session.query(User.username,UserDetails.last_login). join(UserDetails, UserDetails.id==User.id) all()# inner join raw=session.query(User.username,UserDetails.last_login). outerjoin(UserDetails, UserDetails.id==User.id) all() # outer join代表left join 左连接,右连接将表反过来(sqlalchemy没有rightjoin),小表左连接右表效率高 q1=session.query(User.id) q2=session.query(UserDetails.id) raw=q1.union(q2).all() from sqlalchemy import all_,any_ sql_0=session.query(UserDetails.last_login).subquery() #声明子表 raw=session.query(User).filter(User.createtime >all_(sql_0)).all() raw=session.query(User).filter(User.createtime >any_(sql_0)).all() #原生sql sql_1=‘‘‘ select * from `user` ‘‘‘ raw=session.execute(sql_1) #print(raw,dir(raw)) #print(raw.fetchone()) #print(raw.fetchmany()) #print(raw.fetchall()) for i in raw: print(i)query.py
sqlalchemy多表查询
标签:prim metadata class pen login bool string union use