下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SQLAlchemy中的Query方法在SQLAlchemy中执行查询是通过session对象的query方法完成的。query方法非常灵活,你可以根据需要使用不同的查询方式查找数据,下面一一举例。1.直接通过映射类查找:#Querying user instancefor instance in session.query(User).order_by(User.id): print ,instance.fullname这种方法只要在query方法中,将映射类作为参数,就可以查询出这个映射类代表的数据库表中的数据。其相当于下面的SQL语句:SELECT users.
2、id AS users_id, AS users_name,users.fullname AS users_fullname, users.password AS users_passwordFROM users ORDER BY users.id2.通过映射类的属性字段查询:#Querying by ORM-instrumentfor name,fullname in session.query(U,User.fullname): print name,fullname这种方法指定了查询的具体字段,而不是像第一种方法那样把映射类的所有字段都查询出来,其相
3、当于执行了下面的SQL语句:SELECT AS users_name, users.fullname AS users_fullnameFROM users3.query查询的结果是保存在一个元组中的,所以我们可以在query中指定返回整个的映射类对象和其中的部分属性字段:#Querying as a Python objectfor row in session.query(User,U).all(): print row.User,这种查询方法可以返回一个User对象以及它的name属性字段的值,其相当于执行了下面的SQL语句:SELE
4、CT users.id AS users_id, AS users_name, users.fullname AS users_fullname, users.password AS users_passwordFROM users其输出结果为一个元组和一个字符串:user(ed,Ed Jones,f8x902) eduser(Wendy,Wendy Williams,foobar) Wendyuser(Marry,Marry Contrary,xxg527) Marryuser(Fred,Fred Flinstone,blah) Fred4.我们还可以给返回的结果起一个
5、别名,或者叫标签:#Querying labeledfor row in session.query(U.label(name_label).all(): print (_label)这里的关键是label方法,它的意思是把User的name字段改个名字叫name_label,其相当于执行以下的SQL语句:SELECT AS name_labelFROM users6.除了给映射类字段起别名,我们还可以给映射类起个别名:#Querying with aliasedfrom sqlalchemy.orm import aliaseduser_
6、alias=aliased(User,name=user_alias)for row in session.query(user_alias,user_).all(): print row.user_alias这里要注意的是,我们引入了aliased函数,并且给User映射类起了个别名叫user_alias。然后我们就可以在query中使用这个别名了,它相当于是User对象。上面的代码相当于执行了以下SQL语句:SELECT user_alias.id AS user_alias_id, user_ AS user_alias_name,user_ali
7、as.fullname AS user_alias_fullname, user_alias.password AS user_alias_passwordFROM users AS user_alias7.由于query的查询返回的是一个元组,所以我们可以利用Python对数组类对象进行“分片”的操作,来限制返回的结果集范围:#Querying with limit and offsetfor u in session.query(User).order_by(User.id)1:3: print u这里我们对返回的结果加上了1:3,来限制返回的结果集范围。其执行相当于下面的SQL语句:SE
8、LECT users.id AS users_id, AS users_name,users.fullname AS users_fullname, users.password AS users_passwordFROM users ORDER BY users.id LIMIT ? OFFSET ?8.前面的查询都没有涉及到子查询,也就是SQL的where子句。在SQLAlchemy框架中,query的子查询可以通过filter_by来实现:#Qyering with filter byfor name, in session.query(U).fil
9、ter_by(fullname=Ed Jones): print name上面的查询相当于要找出User映射表中fullname为Ed Jones的数据,其相当于执行了下面的SQL语句:SELECT AS users_nameFROM usersWHERE users.fullname = ?9.除了filter_by之外,我们还可以使用filter方法,这种方式看起来更灵活,我们可以按照映射类对象的属性来指定查询条件:#Querying with filterfor name, in session.query(U).filter(User.fullna
10、me=Ed Jones): print name其参数与filter_by不同,这里使用了映射类名加属性字段的方式来指定查询子句参数,其相当于执行了下面的SQL语句:SELECT AS users_nameFROM usersWHERE users.fullname = ?如果我们想要嵌套多个查询条件,可以嵌套多个filter:#Querying with fully generativefor name, in session.query(U).filter(User.fullname=Ed Jones).filter(U=ed): pr
11、int name可以看到我们在filter方法后面又嵌套了一个filter,理论上可以嵌套无数个,其相当于执行了下面的SQL语句:SELECT AS users_nameFROM usersWHERE users.fullname = ? AND = ?完整的示例代码如下:from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column,Integer,Stringfrom sqlalchemy import Sequencefrom sqlalc
12、hemy.orm import sessionmakerBase=declarative_base()from sqlalchemy import create_engineengine=create_engine(sqlite:/:memory:,echo=True)class User(Base): _tablename_=users id=Column(Integer,Sequence(user_id_seq),primary_key=True) name=Column(String(50) fullname=Column(String(50) password=Column(Strin
13、g(12) def _init_(self,name,fullname,password): =name self.fullname=fullname self.password=password def _repr_(self): return %(,self.fullname,self.password)Base.metadata.create_all(engine)Session=sessionmaker(bind=engine)session=Session()#Add on usered_user=User(ed,Ed Jones,edpasswo
14、rd)session.add(ed_user)#Retrive saved ed_userour_user=session.query(User).filter_by(name=ed).first()print our_user is:,our_userprint our_user id is:,our_user.idprint our_user is ed_user,our_user=ed_user#Add multiple objectsession.add_all( User(Wendy,Wendy Williams,foobar), User(Marry,Marry Contrary,
15、xxg527), User(Fred,Fred Flinstone,blah) )#Detective the dirty dataed_user.password=f8x902print Dirty data,session.dirty#Detective the new dataprint New data,session.new#Commit mit()#=Querying=#Querying user instancefor instance in session.query(User).order_by(User.id): print instance.
16、name,instance.fullname#Querying by ORM-instrumentfor name,fullname in session.query(U,User.fullname): print name,fullname#Querying as a Python objectfor row in session.query(User,U).all(): print row.User,#Querying labeledfor row in session.query(U.label(name_label).al
17、l(): print (_label)#Querying with aliasedfrom sqlalchemy.orm import aliaseduser_alias=aliased(User,name=user_alias)for row in session.query(user_alias,user_).all(): print row.user_alias#Querying with limit and offsetfor u in session.query(User).order_by(User.id)1:3: print u#Qyering with filter byfor name, in session.query(U).filter_by(fullname=Ed Jon
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 燃气锅炉维护规程
- 一例更年期情绪障碍患者的护理个案
- 隔油排污设备维护保养计划方案
- 打印设备维护记录表
- 空肠营养管堵塞应急演练脚本
- 团雾天气行车安全
- 强紫外线防护措施
- 冠状动脉破裂护理查房
- 高温热浪防护指南
- JavaScript 程序设计 课件 第9章-JavaScript常用对象
- 2026中国智能投顾行业发展策略与风险控制研究报告
- (2026年春季新版本)人教版二年级数学下册全册教案
- 无水氟化氢生产影响因素及控制方法解析
- 网络涉毒预警监测分析报告
- 人民医院美容中医科临床技术操作规范2023版
- 《影视光线艺术与照明技巧》word版本
- 五华区城中村改造实施办法
- 云南省住院病案首页附页
- 《社会工作概论(第三版)》课件01 第一章 社会工作导论
- 内蒙古乡镇卫生院街道社区卫生服务中心地址医疗机构名单1598家
- 浙江省(2019-2022年)学业水平考试真题生物试卷汇编含答案
评论
0/150
提交评论