【Flask】Sqlalchemy group_by having

### group_by:
根据某个字段进行分组。比如想要根据性别进行分组,来统计每个分组分别有多少人

### having:

having是对查找结果进一步过滤。比如只想要看未成年人的数量,那么可以首先对年龄进行分组统计人数,然后再对分组进行having过滤。示例代码如下:

 1 # coding:utf-8
 2 # Author: liangjun.chen
 3
 4 from datetime import datetime
 5 from sqlalchemy import create_engine, Column, Integer, String, Enum, func
 6
 7 from sqlalchemy.ext.declarative import declarative_base
 8 from sqlalchemy.orm import sessionmaker, relationship, backref
 9
10 HOSTNAME = ‘127.0.0.1‘
11 PORT = 3306
12 DATABASE = ‘sqlalchemy_first‘
13 USERNAME = ‘root‘
14 PASSWORD = ‘123456‘
15
16 DB_URI = ‘mysql+pymysql://{username}:{password}@{host}:{port}/{dbname}?charset=utf8‘.format(
17         username=USERNAME, password=PASSWORD, host=HOSTNAME, port=PORT, dbname=DATABASE
18 )
19 engine = create_engine(DB_URI)
20 Base = declarative_base(engine)
21 Session = sessionmaker(engine)
22 session = Session()
23
24
25
26 class User(Base):
27     __tablename__ = ‘user‘
28     id = Column(Integer, primary_key=True, autoincrement=True)
29     username = Column(String(50), nullable=False)
30     age = Column(Integer, default=0)
31     gender = Column(Enum(‘male‘, ‘female‘, "secret"), default=‘male‘)
32
33     def __repr__(self):
34         return "User<{}>".format(self.username)
35 # Base.metadata.drop_all()
36 # Base.metadata.create_all()
37 #
38 # user = User(username=‘saber‘, age=17, gender=‘male‘)
39 # user2 = User(username=‘saber2‘, age=18, gender=‘male‘)
40 # user3 = User(username=‘saber3‘, age=18, gender=‘female‘)
41 # user4 = User(username=‘saber4‘, age=19, gender=‘female‘)
42 # user5 = User(username=‘saber5‘, age=19, gender=‘female‘)
43 #
44 # session.add_all([user, user2, user3, user4, user5])
45 # session.commit()
46
47 # group_by
48
49 users = session.query(User.age, func.count(User.id)).group_by(User.age)
50 print users.all()
51
52 # having
53 users = session.query(User.age, func.count(User.id)).group_by(User.age).having(User.age>18).all()
54 print users

原文地址:https://www.cnblogs.com/chen0427/p/8799153.html

时间: 2024-11-05 20:29:02

【Flask】Sqlalchemy group_by having的相关文章

【Flask】Sqlalchemy join

### join:1. join分为left join(左外连接)和right join(右外连接)以及内连接(等值连接).2. 参考的网页:http://www.jb51.net/article/15386.htm3. 在sqlalchemy中,使用join来完成内连接.在写join的时候,如果不写join的条件,那么默认将使用外键来作为条件连接.4. query查找出来什么值,不会取决于join后面的东西,而是取决于query方法中传了什么参数.就跟原生sql中的select 后面那一个一样

【Flask】Sqlalchemy 外键

### 外键:使用SQLAlchemy创建外键非常简单.在从表中增加一个字段,指定这个字段外键的是哪个表的哪个字段就可以了.从表中外键的字段,必须和父表的主键字段类型保持一致.示例代码如下: 1 from sqlalchemy import create_engine, Column, Integer, String, Text, ForeignKey 2 3 from sqlalchemy.ext.declarative import declarative_base 4 from sqlal

【Flask】 项目结构说明

项目结构 Flask的一大优势就是其极其轻量化.但是也需要注意到,如果我们要用Flask做一个大项目的话,把所有代码写在一个文件里肯定是不合适的.非常难以维护.但是和Django这种框架又不一样,Flask并没有规定项目一定要遵从某种必须遵守的目录结构.最终,人们在长期的实践中得到一些比较好用因此约定俗成的目录结构. 一个典型的flask项目的目录结构是这样的(再次明确,不是强制的,而是约定俗成的一种结构): 这种结构有四个顶级文件夹,主体的程序代码都放在app包中:migrations文件夹中

【Flask】 结合wtforms的文件上传表单

表单中的文件上传 基本的表单渲染,表单类设置等等就不多说了,参看另一个文章即可.但是那篇文章里没有提到对于FileField,也就是上传文件的表单字段是如何处理,后端又是如何实现接受上传过来的文件的.因为看到了一篇很好的文章[https://zhuanlan.zhihu.com/p/23731819?refer=flask],所以我决定仔细学习一下.下面将按照那篇文章的脉络,由简至繁地说明表单中文件上传的办法. ■ 利用Flask原生的机制进行文件上传 首先在前端肯定有一个带有文件上传功能的表单

【Flask】 使用Flask-Moment进行日期时间的管理

Flask-Moment Flask-Moment又是一个flask的扩展模块,用来处理时间日期等信息.用这个模块主要是考虑到两点,第一是为了让不同时区的用户看到的都是各自时区的实际时间,而不是服务器所在地的时间.第二是对于一些时间间隔的处理,如果要手动处理很麻烦,如果有模块就很好了. ■ 简介 pip install flask-moment  来安装这个扩展模块.值得一提的是,单单在后台装好这个拓展模块是不够的,还需要前端的配合,因此前端也要配置好相关的支持库.按书上说的,使用了由JS开发的

【Flask】 WTForm表单编程

WTForm表单编程 在网页中,为了和用户进行信息交互总是不得不出现一些表单.flask设计了WTForm表单库来使flask可以更加简便地管理操作表单数据.WTForm中最重要的几个概念如下: Form类,开发者自定义的表单必须继承自Form类或者其子类.Form类最主要的功能是通过其所包含的Field类提供对表单内数据的快捷访问方式. 各种Field类,即字段.一般而言每个Field类都对应一个input的HTML标签.比如WTForm自带的一些Field类比如BooleanField就对应

【Flask】 Jinja2模板语言

Jinja2 Jinja2是Python Web编程中的主流模板语言.因为flask是基于Jinja2和Werkzeug发展而来,在安装flask的时候jinja2自动就被装在上面了. 之前提到了很多Jinja2的使用方法啊,下面将补充或者更加详细地说明Jinja2作为模板语言的使用. [Jinja2官方文档]http://docs.jinkan.org/docs/jinja2/ ■ 基本语义 看过之前模板的例子就知道,Jinja2做构成的模板文件中,文本内容大致可以分成几个种类.比如特殊文本(

【Flask】Request

请求方式 Flask默认是GET请求 如果我们在一个页面中即需要GET请求又需要POST请求那么我们需要重写methods方法: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="&

【Flask】Respones

Flask中的HTTPResponse from flask import Flask,redirect app = Flask(__name__) @app.route("/index") def index(): return "hello word" # HttpResponse[返回字符串] if __name__ == '__main__': app.run("0.0.0.0",9876) 在Flask 中的HttpResponse 在