Flask-SQLALchemy查询
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查询的更多相关文章
- day95:flask:SQLAlchemy数据库查询进阶&关联查询
目录 1.数据库查询-进阶 1.常用的SQLAlchemy查询过滤器 2.常用的SQLAlchemy查询结果的方法 3.filter 4.order_by 5.count 6.limit&of ...
- flask SQLAlchemy中一对多的关系实现
SQLAlchemy是Python中比较优秀的orm框架,在SQLAlchemy中定义了多种数据库表的对应关系, 其中一对多是一种比较常见的关系.利用flask sqlalchemy实现一对多的关系如 ...
- flask SQLALchemy外键及约束
from flask import Flask,session from flask_sqlalchemy import SQLAlchemy import config app = Flask(__ ...
- flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作
flask, SQLAlchemy, sqlite3 实现 RESTful API, 同时支持form操作. 前端与后台的交互都采用json数据格式,原生javascript实现的ajax.其技术要点 ...
- tornado 07 数据库—ORM—SQLAlchemy—查询
tornado 07 数据库—ORM—SQLAlchemy—查询 引言 #上节课使用query从数据库查询到了结果,但是query返回的对象是直接可用的吗 #在query.py内输入一下内容 from ...
- sqlalchemy 查询姿势总结
sqlalchemy查询使用 1.带条件查询 查询是最常用的,对于各种查询我们必须要十分清楚,首先是带条件的查询 #带条件查询 rows = session.query(User).filter_by ...
- 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 ...
- Flask – SQLAlchemy成员增加
目录 简介 结构 展示 技术 运行 代码 创建数据库表单 views视图 home主页 添加成员addnew.html 展示页show_all 简介 结构 $ tree -I "__pyca ...
- SQLAlchemy查询
SQLAlchemy查询 结果查询: from databases.wechat import User from config import session def search(): result ...
- SQLAlchemy04 /SQLAlchemy查询高级
SQLAlchemy04 /SQLAlchemy查询高级 目录 SQLAlchemy04 /SQLAlchemy查询高级 1.排序 2.limit.offset和切片操作 3.懒加载 4.group_ ...
随机推荐
- iptables 问题
- linux trap
- Swift基本语法学习笔记
Swift与OC的不同点 导入框架的方式 OC使用#import \<UIKit/UIKit.h> Swift使用import UIKit 定义标识符的方式 Swift中定义标识符,必须指 ...
- BufferedInputStream,FileInputStream,FileChannel实现文件拷贝
从上篇文章中知道BufferedInputStream是自带缓冲区的输入流,可以大大减少IO次数,提供效率.下面的例子中实现了用BufferedInputStream与FileInputStream实 ...
- 习WebSocket一(WebSocket初识)[转]
http://www.cnblogs.com/wgp13x/p/3812579.html Java EE 7 去年刚刚发布了JSR356规范,使得WebSocket的Java API得到了统一,Tom ...
- android 43 SQLite数据库
SQLite数据库很小,占用内存只有几百K,安卓和IOS都是用的SQLite数据库. 页面: <LinearLayout xmlns:android="http://schemas.a ...
- WCF - 绑定
从整个基础架构来看 WCF可分为服务模型层和信道层 模型层提供了一个统一的可扩展的编程模型 而信道层提供了对请求信息的接收和处理 而作为WCF通信的三要素之一的绑定 是它实现了组成整个信道层的信道栈 ...
- iOS开发--通过MultipeerConnectivity完成蓝牙通讯
iOS开发–通过MultipeerConnectivity完成蓝牙通讯 iOS蓝牙通讯的三种方式: GameKit.framework:iOS7之前的蓝牙通讯框架,从iOS7开始过期,但是目前已经被淘 ...
- IOS-CGAffineTransformMake 矩阵变换 的运算原理
1.矩阵的基本知识: struct CGAffineTransform { CGFloat a, b, c, d; CGFloat tx, ty; }; CGAffineTransform C ...
- Map的迭代操作
Map的迭代操作 public static void main(String[] args) { Map<String, List<Integer>> map = new H ...