资源描述:
《python访问数据库, sqlalchemy中的query方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、SQLAlchemy中的Query方法在SQLAlchemy中执行查询是通过session对象的query方法完成的。query方法非常灵活,你可以根据需要使用不同的查询方式查找数据,下面一一举例。1.直接通过映射类查找:#Queryinguserinstanceforinstanceinsession.query(User).order_by(User.id):printinstance.name,instance.fullname这种方法只要在query方法中,将映射类作为参数,就可以查询出这个映射类代表的数据库表中的数
2、据。其相当于下面的SQL语句:SELECTusers.idASusers_id,users.nameASusers_name,users.fullnameASusers_fullname,users.passwordASusers_passwordFROMusersORDERBYusers.id2.通过映射类的属性字段查询:#QueryingbyORM-instrumentforname,fullnameinsession.query(User.name,User.fullname):printname,fullname这种
3、方法指定了查询的具体字段,而不是像第一种方法那样把映射类的所有字段都查询出来,其相当于执行了下面的SQL语句:SELECTusers.nameASusers_name,users.fullnameASusers_fullnameFROMusers3.query查询的结果是保存在一个元组中的,所以我们可以在query中指定返回整个的映射类对象和其中的部分属性字段:#QueryingasaPythonobjectforrowinsession.query(User,User.name).all():printrow.User,r
4、ow.name这种查询方法可以返回一个User对象以及它的name属性字段的值,其相当于执行了下面的SQL语句:SELECTusers.idASusers_id,users.nameASusers_name,users.fullnameASusers_fullname,users.passwordASusers_passwordFROMusers其输出结果为一个元组和一个字符串:<user("ed","EdJones","f8x902")>ed<user("Wendy","WendyWilliam
5、s","foobar")>Wendy<user("Marry","MarryContrary","xxg527")>Marry<user("Fred","FredFlinstone","blah")>Fred4.我们还可以给返回的结果起一个别名,或者叫标签:#Queryinglabeledforrowinsession.query(User.name.label('name_label')).all():print(row.name_label)这里的关键是label方法,它的意思是把User的n
6、ame字段改个名字叫name_label,其相当于执行以下的SQL语句:SELECTusers.nameASname_labelFROMusers6.除了给映射类字段起别名,我们还可以给映射类起个别名:#Queryingwithaliasedfromsqlalchemy.ormimportaliaseduser_alias=aliased(User,name='user_alias')forrowinsession.query(user_alias,user_alias.name).all():printrow.user_a
7、lias这里要注意的是,我们引入了aliased函数,并且给User映射类起了个别名叫user_alias。然后我们就可以在query中使用这个别名了,它相当于是User对象。上面的代码相当于执行了以下SQL语句:SELECTuser_alias.idASuser_alias_id,user_alias.nameASuser_alias_name,user_alias.fullnameASuser_alias_fullname,user_alias.passwordASuser_alias_passwordFROMusers
8、ASuser_alias7.由于query的查询返回的是一个元组,所以我们可以利用Python对数组类对象进行“分片”的操作,来限制返回的结果集范围:#Queryingwithlimitandoffsetforuinsession.query(User).order_by(User.id)