python访问数据库,SQLAlchemy中的Query方法.docx
《python访问数据库,SQLAlchemy中的Query方法.docx》由会员分享,可在线阅读,更多相关《python访问数据库,SQLAlchemy中的Query方法.docx(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、SQLAlchemy 中的 Query 方法在 SQLAlchemy 中执行查询是通过 session 对象的 query 方法完成的。query 方法格外敏捷, 你可以依据需要使用不同的查询方式查找数据,下面一一举例。1. 直接通过映射类查找:#Querying user instancefor instance in session.query(User).order_by(User.id): print instance.name,instance.fullname这种方法只要在 query 方法中,将映射类作为参数,就可以查询出这个映射类代表的数据库表中的数据。其相当于下面的 SQL
2、语句:SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.password AS users_password FROM users ORDER BY users.id2. 通过映射类的属性字段查询:#Querying by ORM-instrumentfor name,fullname in session.query(User.name,User.fullname): print name,fullname这种方法指定了查询的具体字段,而不是像第一种方法
3、那样把映射类的全部字段都查询出来,其相当于执行了下面的 SQL 语句:SELECT users.name AS users_name, users.fullname AS users_fullname FROM users3. query 查询的结果是保存在一个元组中的,所以我们可以在 query 中指定返回整个的映射类对象和其中的局部属性字段:#Querying as a Python objectfor row in session.query(User,User.name).all: print row.User,row.name这种查询方法可以返回一个 User 对象以及它的 name
4、 属性字段的值,其相当于执行了下面的SQL 语句:SELECT users.id AS users_id, users.name 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
5、(“Fred“,“Fred Flinstone“,“blah“) Fred 4.我们还可以给返回的结果起一个别名,或者叫标签:#Querying labeledfor row in session.query(User.name.label(”name_label”).all: print (row.name_label)这里的关键是 label 方法,它的意思是把 User 的 name 字段改个名字叫 name_label,其相当于执行以下的 SQL 语句:SELECT users.name AS name_label FROM users6. 除了给映射类字段起别名,我们还可以给映射类起
6、个别名:#Querying with aliasedfrom sqlalchemy.orm import aliased user_alias=aliased(User,name=”user_alias”)for row in session.query(user_alias,user_alias.name).all: print row.user_alias这里要留意的是,我们引入了 aliased 函数,并且给 User 映射类起了个别名叫 user_alias。然后我们就可以在 query 中使用这个别名了,它相当于是 User 对象。上面的代码相当于执行了以下 SQL 语句:SELEC
7、T user_alias.id AS user_alias_id, user_alias.name AS user_alias_name, user_alias.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.quer
8、y(User).order_by(User.id)1:3: print u这里我们对返回的结果加上了1:3,来限制返回的结果集范围。其执行相当于下面的 SQL语句:SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.password AS users_password FROM users ORDER BY users.idLIMIT ? OFFSET ?8. 前面的查询都没有涉及到子查询,也就是 SQL 的 where 子句。在 SQLAlchemy 框架
9、中,query的子查询可以通过 filter_by 来实现:#Qyering with filter byfor name, in session.query(User.name).filter_by(fullname=”Ed Jones”): print name上面的查询相当于要找出 User 映射表中 fullname 为Ed Jones的数据,其相当于执行了下面的 SQL 语句:SELECT users.name AS users_name FROM usersWHERE users.fullname = ?9. 除了 filter_by 之外,我们还可以使用 filter 方法,这种
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python 访问 数据库 SQLAlchemy 中的 Query 方法
限制150内