四十三:數據庫之SQLAlchemy之group_by和having子句


 

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語句

查詢返回數據

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM