SQLAlchemy 几种查询方式总结

转自:http://blog.csdn.net/shudaqi2010/article/details/51568219

几种常见sqlalchemy查询:
#简单查询    
print(session.query(User).all())
print(session.query(User.name, User.fullname).all())    
print(session.query(User, User.name).all())

#带条件查询    
print(session.query(User).filter_by(name=‘user1‘).all())    
print(session.query(User).filter(User.name == "user").all())    
print(session.query(User).filter(User.name.like("user%")).all())

#多条件查询    
print(session.query(User).filter(and_(User.name.like("user%"), User.fullname.like("first%"))).all())    
print(session.query(User).filter(or_(User.name.like("user%"), User.password != None)).all())

#sql过滤    
print(session.query(User).filter("id>:id").params(id=1).all())

#关联查询     
print(session.query(User, Address).filter(User.id == Address.user_id).all())    
print(session.query(User).join(User.addresses).all())    
print(session.query(User).outerjoin(User.addresses).all())

#聚合查询    
print(session.query(User.name, func.count(‘*‘).label("user_count")).group_by(User.name).all())    
print(session.query(User.name, func.sum(User.id).label("user_id_sum")).group_by(User.name).all())

#子查询    
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).outerjoin((stmt, User.id == stmt.c.user_id)).order_by(User.id).all())

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

限制返回字段查询
person = session.query(Person.name, Person.created_at,Person.updated_at).filter_by(name="zhongwei").order_by(Person.created_at).first()

记录总数查询:
from sqlalchemy import func

# count User records, without
# using a subquery.
session.query(func.count(User.id))

# return count of user "id" grouped
# by "name"
session.query(func.count(User.id)).\
        group_by(User.name)

from sqlalchemy import distinct
# count distinct "name" values
session.query(func.count(distinct(User.name)))

select two distinct columns with flask and sqlalchemy

SELECT DISTINCT gradelevel, beginningorendtest
FROM wordlist
ORDER BY gradelevel,beginningorendoftest

the equivalent query:

data = wordlist.query.with_entities(wordlist.gradelevel, wordlist.beginningorendtest)
        .distinct().order_by(wordlist.gradelevel).order_by(wordlist.beginningorendtest)
时间: 2024-08-08 14:32:16

SQLAlchemy 几种查询方式总结的相关文章

Hibernate的Api以及三种查询方式

Hibernate  Api |-- Configuration       配置管理类对象 config.configure();    加载主配置文件的方法(hibernate.cfg.xml) 默认加载src/hibernate.cfg.xml config.configure("cn/config/hibernate.cfg.xml");   加载指定路径下指定名称的主配置文件 config.buildSessionFactory();   创建session的工厂对象 |--

Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象.其它的,包括一些查询函数(count(),sum()等).查询条件的设定等,全都跟SQL语法一样. 示例: Session session = SessionFactory.getCurrentSession(); User user = null; Transaction ts = s

hibernate的三种查询方式

hibernate的查询方式常见的主要分为三种: HQL, QBC, 以及使用原生SQL查询(Session的查询) 1)Query的查询:使用HQL语句或SQL语句完成查询 2)Criteria的查询:通过方法和类中属性的关系,来设置查询条件,完成查询. 3)Session的查询:按主键查询查询,方法为get或load 一.HQL查询 ? HQL(Hibernate Query Language)提供了丰富灵活的查询方式,使用HQL进行查询也是Hibernate官方推荐使用的查询方式. ? H

sessionFactory的创建和四种查询方式

1,关于sessionFactory的创建 5.0版本之前,下面这种方式在5.0及之后,可能会出问题,建议修改为5.0之后的方式 // 实例化Configuration Configuration configuration = new Configuration(); // 加载hibernate.cfg.xml文件 configuration.configure("/hibernate.cfg.xml"); // 创建SessionFactory StandardServiceRe

Hibernate系列(四):Hibernate两种查询方式:HQL和Criteria

Hibernate主要是提供与数据库之间交互的一个框架,想要用面向对象的语言操作关系型数据库,有如下两种操作方式: HQL语句:面向对象的查询语言,对象名区分大小写.而且不同于SQL的是这里查询的是对象,而不是表,并且支持多态.hql主要通过Query操作 Criteria类:是一种面向对象的查询,主要查询条件. 一.HQL语句: 比如我们要根据name属性查询一条记录(对象): static void query(String name){ Session s = null; try{ s =

NHibernate的几种查询方式

SQL:普通SQL查询(也就是SQLServer,Oracle,Sybase等数据库的查询语句,建议使用基于TSQL-92) 核心对象:CreateSQLQuery IList list = session.CreateSQLQuery(select * from TabUser).AddEntity(typeof(TabUser)).List(); HQL:Hibernate查询 核心对象:CreateQuery IList list = session.CreateQuery("from T

Hibernate的session.createSQLQuery的几种查询方式

当我们用HQL进行子查询的时候,如select * from Tree where pid in (select id from Tree,此时HIBERANTE就会报错,说什么*号错误之类的.但如果将*改为Tree类里的所有子段时就不会有问题了.就会像平时一样第一行数据返 回一个Object[],然后你再根据Tree类里字段对Object[]数组里的值进行转换.这样一来比较麻烦.今天发现如果我SQL来查有一个方法可 以返回一个对象的. Configuration config = new Co

NHibernate3.2学习笔记-几种查询方式

一.开发环境 数据库:SQLServer2008 编译器:VS2010 .Net版本:.Net Framework 4.0 二.开发过程 1.项目结构 承接上一篇 2.执行sql语句 (1)基本语法 static void ExecuteSql() { string str = "select * from T_Product"; ISQLQuery query = session.CreateSQLQuery(str).AddEntity(typeof(Product)); ILis

Dynamic CRM 2013学习笔记(十)客户端几种查询数据方式比较

我们经常要在客户端进行数据查询,下面分别比较常用的几种查询方式:XMLHttpRequest, SDK.JQuery, SDK.Rest. XMLHttpRequest是最基本的调用方式,JQuery和Rest的二种方式其实也是用的XMLHttpRequest,只不过是把它封装了一下 JQuery和Rest二种方式的接口一样,所以调用方式也一样 1. XMLHttpRequest 定义 1: function ODataRetrieve(oDataString) { 2: var ServerU