似乎ORM最难设计的部分是查询。特别是面向对象的查询,今天学习SQLAlchemy,发现SQLAlchemy的查询语法竟如此灵活,惊叹其如此强大的表达能力的同时也对Python也有了更深的认识。下面看一下我写的一些查询语句:

Python代码:

#简单查询

#注意User是一个类对象,user_table是数据库中的表

print(session.query(User).all())

—相当于SQL语句—>

select * from user_table

print(session.query(User.name,User.fullname.all()))

—相当于SQL语句—>

select user_table.name,user_table.fullname from user_table

print(session.query(User,user.name).all())

—相当于SQL语句—>

select user_table.name from user_table

#条件查询

print (session.query(User).filter_by(name=’user1).all())

—相当于SQL语句—>

select * from user_table where name = ‘user1’

print (session.query(User).filter(User.name == “user).all())

—相当于SQL语句—>

select * from user_table where user_table.name = user

print (session.query(User).filter(User.name.like(“user%”)).all())

—相当于SQL语句—>

select * from user_table where user_table.name like user%

#多条件查询

print (session.query(User).filter(and_(User.name.like(“user),User.fullname.like(“first%”))).all()

—相当于SQL语句—>

select * from user_table where user_table.name like %user and user_table.fullname like first%

print(session.query(User).filter(or_(User.name.like(“user%),User.password != None)).all()

—相当于SQL语句—>

select * from user_table where user_table.name = user% or user_table.password != none

#sql过滤

print(session(User).filter(“id>:id”).params(id=1).all()

—相当于SQL语句—>

select * from user_table where user_table.id > 1

#关联查询

print(session.query(User,Address).filter(User.id == Address.user_id).all()

—相当于SQL语句—>

select * from user_table,address_table where user_table.id == address.user_id

print (session.query(User).jion(User.address).all()

—相当于SQL语句—>

********************

print (session.query(User).outerjoin(User.address).all())

*******************

#聚合查询

print(session.query(User.name,func.count(‘*’).label(“user_count)).group_by(User.name).all())

—相当于SQL语句—>

select count(user_table.name) as user_count from user_table where group by(user_table.name)

print(session.query(User.name,func.sum(User.id).label(“user_id_sum”)).group_by(User.name).all())

—相当于SQL语句—>

select user_table.name,sum(user_table.id)  from user_table where group by(user_table.name)

#子查询

stmt = session.query(Address.user_id,func.count(‘*’).label(“address_count”).group by(Address.user_id).subquery()

print (session.query(User,stmt.c.address_count).outjion((stmt,User.id == stmt.c.user_id.order_by(User_id).all()

#exits

print (session.query(User).filter(exists().where(Address.user_id == User.id)))

print (session.query(User).filter(User.addresses.any()))

  

python orm框架-----SQLALchemy-查询篇的更多相关文章

  1. Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍

    1. 添加一个新对象 前面介绍了映射到实体表的映射类User,如果我们想将其持久化(Persist),那么就需要将这个由User类建立的对象实例添加到我们先前创建的Session会话实例中: 复制代码 ...

  2. 手撸ORM浅谈ORM框架之Add篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  3. 手撸ORM浅谈ORM框架之Query篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  4. 手撸ORM浅谈ORM框架之基础篇

    好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...

  5. 手撸ORM浅谈ORM框架之Update篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  6. 手撸ORM浅谈ORM框架之Delete篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  7. python、第七篇:ORM框架SQLAlchemy

    一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...

  8. Python ORM框架之SQLAlchemy

    前言: Django的ORM虽然强大,但是毕竟局限在Django,而SQLAlchemy是Python中的ORM框架: SQLAlchemy的作用是:类/对象--->SQL语句--->通过 ...

  9. python(十二)下:ORM框架SQLAlchemy使用学习

    此出处:http://blog.csdn.net/fgf00/article/details/52949973 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 ...

随机推荐

  1. 多级联动系列——ajax调用XML实现三级联动

    ajax 使用起来特别的方便,再也不操心浏览器兼容问题了.用ajax调用XML页面中的内容,来生成三级联动,OK废话不多说,跟着我一步步写吧. 首先写一个XML文件.data.xml <?xml ...

  2. 学习笔记——WPF

    WPF,Windows Presentation Foundation.主要作用在于界面呈现,但Presentation却是介绍的意思. WPF采用XAML + 代码相结合的方式,感觉跟ASP.NET ...

  3. oc30--id

    // // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject - (void)sleep; @ ...

  4. 如何使用git 生成patch 和打入patch 标签: gitpatch【转】

    本文转载自:http://blog.csdn.net/liuhaomatou/article/details/54410361 平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用 ...

  5. JAVA8与lambda表达式

    一.lambda表达式的来源 Lambda 表达式(拉姆达表达式)来源于lambda演算是Alonzo Church给出的一套图灵机等价的形式计算系统.lambda演算系统以函数和变量为基础,也可以进 ...

  6. rpmbuild

    rpm2cpio xxx.rpm | cpio -div

  7. 3.2 手机中的数据库——SQLite

    http://www.sqlite.org/download.html 截至我安装SQLite数据库为止的时间,最新的版本可以下载sqlite-dll-win64-x64-3200000.zip和sq ...

  8. layui富文本编译器后台获取图片路径

    @RequestMapping("add")    public ModelAndView add(News news){        ModelAndView mav = ne ...

  9. Linux学习教程

    前言 “Linux?听说是一个操作系统,好用吗?” “我也不知道呀,和windows有什么区别?我能在Linux上玩LOL吗” “别提了,我用过Linux,就是黑乎乎一个屏幕,鼠标也不能用,不停地的敲 ...

  10. POJ 2342 Anniversiry Party(TYVJ1052 没有上司的舞会)

    题意: P1052 没有上司的舞会 描述 Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个快乐指数.现在有个周 ...