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_ ...
随机推荐
- python 3 操作 excel
看到一篇很好的python读写excel方式的对比文章: 用Python读写Excel文件 关于其他版本的excel,可以通过他提供的链接教程进行学习. XlsxWriter: https://git ...
- kafka leader 服务器均衡。
Whenever a broker stops or crashes leadership for that broker's partitions transfers to other replic ...
- Ubuntu下Android Studio安装、配置和使用
Ubuntu下使用Android Studio开发应用程序,首先需要安装该IDE. 情况1:Ubuntu下安装Android Studio 打开Terminal,执行下述指令: sudo apt-ad ...
- mapreduce 读写lzo文件
1.读lzo文件 需要添加以下代码,并导入lzo相关的jar包 job.setInputFormatClass(LzoTextInputFormat.class); 2.写lzo文件 lzo格式默认 ...
- JS时钟钟表
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...
- CSS3动画变形transition
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- flipsnap--手机屏幕水平滑动框架
在很多手机应用中,大家都会见过这样一种效果:当手指横向滑动屏幕时,屏幕上的页面会向左或向右滑动. 下面介绍一下当用HTML5+CSS3开发手机应用时解决这类效果的一款js框架:flipsnap. fl ...
- delphi 保存 和 打开 TREE VIEW的节点已经展开的状态
保存 和 打开 TREE VIEW的节点已经展开的状态 如果每次打开后能自动读取上次展开的状态就会非常快捷 下载地址: 实现方法 将已经展开的节点索引 放在一个文本中最后选中的那个节点索引放在最后一位 ...
- android 48 广播
系统开始重启会发送开机重启广播,电量低的时候会发送电量低的广播,广播注册有2种:系统说明文件xml注册和Java代码注册,前者是静态注册(全局注册)后者是动态注册(依赖于当时组建,组件销毁就收不到广播 ...
- web.xml常用标签整理(不定期更新)
<?xml version="1.0" encoding="UTF-8"?><!-- 标明使用的XML版本和文档编码,此项必须位于第一行,之前 ...