子查询让多个查询变成一个查询,只需要查找一次数据库,性能相对来讲更高效,不用写多个SQL语句就可以实现一些复杂的查询,在SQLAlchemy中要实现一个子查询,应该使用以下步骤:
1、将子查询按照传统方式写好查询代码,然后在query对象后面执行subquery(),将这个查询变成子查询
2、在子查询中,将以后需要用到的字段通过label(别名)方法,取别名
3、在父查询中,如果想用子查询中的字段,可以通过子查询返回值.c.字段名拿到

准备工作

from sqlalchemy import create_engine, Column, Integer, String, DateTime, ForeignKey, func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship # 数据库信息
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)
city = Column(String(50), nullable=False)
age = Column(Integer, default=0) def __repr__(self):
return f'username: {self.username}' Base.metadata.drop_all() # 删除所有表
Base.metadata.create_all() # 创建表 user1 = User(username='user1', city='北京', age=18)
user2 = User(username='user2', city='北京', age=18)
user3 = User(username='user3', city='上海', age=18)
user4 = User(username='user4', city='北京', age=26)
session.add_all([user1, user2, user3, user4])
session.commit()

查询和user1在用一个城市,且年龄相等的人

SQL语句实现

传统方式,需从数据库查找两次

subquery方式

先看一下转换的SQL语句

查询结果

最新文章

  1. Python来做应用题及思路
  2. 程序是如何执行的(一)a=a+1
  3. 【leetcode】Word Search (middle)
  4. 和为S的两个数字
  5. Python strip、lstrip和rstrip的用法
  6. 【PHP设计模式 07_ZeRenLian.php】责任链模式
  7. Unity安卓连接profile调试
  8. jQuery1.9.1--attr,prop与val方法源码分析
  9. (三)spark集群DHCP IP变化后的处理
  10. 《Linux系统静态路由和火墙路由》
  11. Hadoop SequenceFile
  12. 撸基础篇系列,JAVA的NIO部分
  13. cocos2d-x3.6 连连看完整源代码
  14. 除了Office和wps,还有什么办公软件比较好用?
  15. JavaScript大杂烩13 - 总结ECMAScript 5新功能
  16. 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形网格添加分页
  17. 设置多台机器linux服务器ssh相互无密码访问
  18. 【转】每天一个linux命令(52):ifconfig命令
  19. Hadoop总结
  20. 让 IE6支持max-height

热门文章

  1. Java语言基础(3)
  2. Turing Tree HDU - 3333 (树状数组,离线求区间元素种类数)
  3. kotlin项目开发基础之gradle初识
  4. CVE漏洞分析
  5. Python核心技术与实战——二十|assert的合理利用
  6. springboot jpa 创建数据库以及rabbitMQ分模块扫描问题
  7. jquery $(".classc",$(".classp"))的含义
  8. node之events 模块,并通过实例化 EventEmitter 类来绑定和监听事件
  9. CF contest 1216 Div3. F
  10. django + jquery 实现二级联动