from: http://blog.sina.com.cn/s/blog_633277f90100kpvm.html

似乎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()))

Flask-SQLALchemy查询的更多相关文章

  1. day95:flask:SQLAlchemy数据库查询进阶&关联查询

    目录 1.数据库查询-进阶 1.常用的SQLAlchemy查询过滤器 2.常用的SQLAlchemy查询结果的方法 3.filter 4.order_by 5.count 6.limit&of ...

  2. flask SQLAlchemy中一对多的关系实现

    SQLAlchemy是Python中比较优秀的orm框架,在SQLAlchemy中定义了多种数据库表的对应关系, 其中一对多是一种比较常见的关系.利用flask sqlalchemy实现一对多的关系如 ...

  3. flask SQLALchemy外键及约束

    from flask import Flask,session from flask_sqlalchemy import SQLAlchemy import config app = Flask(__ ...

  4. flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作

    flask, SQLAlchemy, sqlite3 实现 RESTful API, 同时支持form操作. 前端与后台的交互都采用json数据格式,原生javascript实现的ajax.其技术要点 ...

  5. tornado 07 数据库—ORM—SQLAlchemy—查询

    tornado 07 数据库—ORM—SQLAlchemy—查询 引言 #上节课使用query从数据库查询到了结果,但是query返回的对象是直接可用的吗 #在query.py内输入一下内容 from ...

  6. sqlalchemy 查询姿势总结

    sqlalchemy查询使用 1.带条件查询 查询是最常用的,对于各种查询我们必须要十分清楚,首先是带条件的查询 #带条件查询 rows = session.query(User).filter_by ...

  7. flask建表遇到的错误: flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specified key was too long; max key length is 767 bytes')

    error:flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specifie ...

  8. Flask – SQLAlchemy成员增加

    目录 简介 结构 展示 技术 运行 代码 创建数据库表单 views视图 home主页 添加成员addnew.html 展示页show_all 简介 结构 $ tree -I "__pyca ...

  9. SQLAlchemy查询

    SQLAlchemy查询 结果查询: from databases.wechat import User from config import session def search(): result ...

  10. SQLAlchemy04 /SQLAlchemy查询高级

    SQLAlchemy04 /SQLAlchemy查询高级 目录 SQLAlchemy04 /SQLAlchemy查询高级 1.排序 2.limit.offset和切片操作 3.懒加载 4.group_ ...

随机推荐

  1. python 3 操作 excel

    看到一篇很好的python读写excel方式的对比文章: 用Python读写Excel文件 关于其他版本的excel,可以通过他提供的链接教程进行学习. XlsxWriter: https://git ...

  2. kafka leader 服务器均衡。

    Whenever a broker stops or crashes leadership for that broker's partitions transfers to other replic ...

  3. Ubuntu下Android Studio安装、配置和使用

    Ubuntu下使用Android Studio开发应用程序,首先需要安装该IDE. 情况1:Ubuntu下安装Android Studio 打开Terminal,执行下述指令: sudo apt-ad ...

  4. mapreduce 读写lzo文件

    1.读lzo文件 需要添加以下代码,并导入lzo相关的jar包  job.setInputFormatClass(LzoTextInputFormat.class); 2.写lzo文件 lzo格式默认 ...

  5. JS时钟钟表

    <!DOCTYPE html> <html>    <head>        <meta charset="utf-8" />   ...

  6. CSS3动画变形transition

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. flipsnap--手机屏幕水平滑动框架

    在很多手机应用中,大家都会见过这样一种效果:当手指横向滑动屏幕时,屏幕上的页面会向左或向右滑动. 下面介绍一下当用HTML5+CSS3开发手机应用时解决这类效果的一款js框架:flipsnap. fl ...

  8. delphi 保存 和 打开 TREE VIEW的节点已经展开的状态

    保存 和 打开 TREE VIEW的节点已经展开的状态 如果每次打开后能自动读取上次展开的状态就会非常快捷 下载地址: 实现方法 将已经展开的节点索引 放在一个文本中最后选中的那个节点索引放在最后一位 ...

  9. android 48 广播

    系统开始重启会发送开机重启广播,电量低的时候会发送电量低的广播,广播注册有2种:系统说明文件xml注册和Java代码注册,前者是静态注册(全局注册)后者是动态注册(依赖于当时组建,组件销毁就收不到广播 ...

  10. web.xml常用标签整理(不定期更新)

    <?xml version="1.0" encoding="UTF-8"?><!-- 标明使用的XML版本和文档编码,此项必须位于第一行,之前 ...