group_by:根据某个字段进行分组,比如想要根据年龄进行分组,再统计每一组有多少人
having:对查找结果进一步过滤,类似于SQL语句的where

准备工作

from sqlalchemy import create_engine, Column, Integer, String, Float, Text, ForeignKey, DateTime, Enum
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship, backref # 数据库信息
host = '127.0.0.1'
port = '3306'
database = 'db_to_sqlalchemy'
username = 'root'
password = '123456' # 数据库类型+连接数据库的插件,这里使用的pymysql
DB_URI = f'mysql+pymysql://{username}:{password}@{host}:{port}/{database}' engine = create_engine(DB_URI) # 创建引擎
Base = declarative_base(engine) # 使用declarative_base创建基类
session = sessionmaker(engine)() class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(50), nullable=False)
age = Column(Integer, default=0)
gender = Column(String(20), default='male') Base.metadata.drop_all() # 删除所有表
Base.metadata.create_all() # 创建表 user1 = User(username='user1', age=20, gender='male')
user2 = User(username='user2', age=21, gender='female')
user3 = User(username='user3', age=20, gender='secret')
user4 = User(username='user4', age=26, gender='male')
user5 = User(username='user5', age=19, gender='female')
session.add_all([user1, user2, user3, user4, user5])
session.commit()

group_by:将数据根据指定的字段进行分组,如:根据年龄 分组,统计每个组的人数

先看一下转化的SQL语句

查询返回数据

having:对返回数据进行二次过滤,类似于where,如:根据年龄 分组,统计每个组的人数,然后再删选出年龄大于25的数据

先看一下转化的SQL语句

查询返回数据

四十三:数据库之SQLAlchemy之group_by和having子句的更多相关文章

  1. 四十四:数据库之SQLAlchemy之join实现复杂查询

    准备工作 from datetime import datetime from sqlalchemy import create_engine, Column, Integer, String, Da ...

  2. 三十四:数据库之SQLAlchemy外建及四种约束

    使用SQLAlchemy创建外建,只需要在子表的字段中指定此字段的外建是哪个表的哪个字段即可,字段类型需和父表下该字段的类型保持一致 使用ondelete指定约束, 外建约束有以下几种:1.RESTR ...

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

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

  4. tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作

    tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作 一. ORM #在服务器后台,数据是要储存在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办?是不 ...

  5. (十三)数据库查询处理之QueryExecution(2)

    (十三)数据库查询处理之QueryExecution(2) 实验室这一周真的忙爆(虽然都是各种打杂的活)所以拖了很久终于在周末(摸鱼)把实验3做完了.同时准备把和查询这一块有关的博客补一下.然后就进入 ...

  6. Laravel教程 四:数据库和Eloquent

    Laravel教程 四:数据库和Eloquent 此文章为原创文章,未经同意,禁止转载. Eloquent Database 上一篇写了一些Laravel Blade的基本用法和给视图传递变量的几种方 ...

  7. NeHe OpenGL教程 第四十三课:FreeType库

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. (SQL SERVER) (ORACLE) (ACCESS)(POSTGRE SQL)四种数据库操作C#代码

    将对这四种数据库的操作封装到了2个类中可以拷贝过去直接使用. public sealed class OleDbClass { #region private utility methods & ...

  9. Java进阶(四十三)线程与进程的区别

    Java进阶(四十三)线程与进程的区别 1.线程的基本概念   概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必 ...

随机推荐

  1. kubernetes如何访问pod服务

    一.通过 Service 访问 Pod: 我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 control ...

  2. Python测开面试题之装饰器

    Python的装饰器是面试常被问到的问题之一,在面试Python测试开发时被问到的概率不低于70%,那么装饰器的原理是什么,怎么快速写出一个装饰器呢,接下来我们详细讲解装饰器的实现方法. Python ...

  3. 加上这几个组件,flask摇身一变是django

    写在前面 flask和django作为python中的两大开源框架,各分春秋,各有各自的优点,不能一概而论说哪个好哪个不好.flask框架小而精,适用于快速开发一些小的应用的项目.django大而全, ...

  4. 杜教BM模板

    #include<bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #defi ...

  5. php和redis实现消息队列

    php+redis消息队列是php+mysql性能不足时的一个中间间处理方案.通过这个中间的处理,保证的数据的可用性和准确性.用于服务器瞬间请求大,数据库压力大的情况.如并发量大导致的超卖.并发量大导 ...

  6. [易学易懂系列|rustlang语言|零基础|快速入门|(16)|代码组织与模块化]

    [易学易懂系列|rustlang语言|零基础|快速入门|(16)|代码组织与模块化] 实用知识 代码组织与模块化 我们知道,在现代软件开发的过程中,代码组织和模块化是应对复杂性的一种方式. 今天我们来 ...

  7. Sql service 分页存储过程

    create database Exam_Week3 GO USE Exam_Week3 GO create table Classs ( ClaID ,), ClassName ), Counts ...

  8. 498. Diagonal Traverse

    题目思路 题目来源 C++实现 class Solution { public: vector<int> findDiagonalOrder(vector<vector<int ...

  9. [uboot] (第三章)uboot流程——uboot-spl代码流程 后续2018版本分析

    board_init_f在/u-boot-2018.07-fmxx/arch/arm/mach-fmxx/spl.c中定义 board_init_f之后,和转载的部分有出入: u-boot-2018. ...

  10. 数组扩展运算符 -ES6

    1.将数组转为以逗号分隔的序列 2.格式 ...[1,2,3 ] 3.若扩展运算符后面是一个空数组,则不产生效果[ ] 4.用于函数参数 function add(x,y) { console.log ...