当前位置: 首页 > ai >正文

Flask-SQLAlchemy使用小结

链表查询

join方法允许你指定两个或多个表之间的连接条件,并返回一个新的查询对象,该对象包含了连接后的结果。

内连接

from sqlalchemy import join

# 使用join函数
query = db.session.query(User, Order).join(Order, User.id == Order.user_id)
results = query.all()

# 或者使用Query对象的join方法
query = db.session.query(User, Order).join(Order, User.id == Order.user_id)
results = query.all()

# 遍历结果
for user, order in results:
    print(user.username, order.order_id)  # 假设Order表有一个order_id字段

左连接

query = db.session.query(User, Order).outerjoin(Order, User.id == Order.user_id)
results = query.all()

# 遍历结果,注意这里可能有些User没有对应的Order
for user, order in results:
    if order is not None:
        print(user.username, order.order_id)
    else:
        print(user.username, "No orders")
 

通过左连接,查询dialogue_detail和detail_eval表;

conditions = [DialogueDetail.dialog_id == dialog_id,DialogueDetail.create_by == get_user_id()]
dialog_detail_fields = ["id", "dialog_id", "content", "dialog_role","user_source", "create_by", "create_time", "is_delete"]
detail_eval_fields = ["comment_type", "feedback_type", "feedback_content"]
query = (db.session.query(*[getattr(DialogueDetail, f1) for f1 in dialog_detail_fields],*[getattr(DialogueDetailEvaluation, f2) for f2 in detail_eval_fields]).join(DialogueDetailEvaluation,DialogueDetailEvaluation.dialog_detail_id == DialogueDetail.id,isouter=True).filter(*conditions).order_by(DialogueDetail.create_time))tmp_all = query.all()

多表连接

# 假设还有第三个表Product,Order表有一个product_id字段指向Product表的id字段
query = db.session.query(User, Order, Product).join(Order, User.id ==Order.user_id).join(Product, Order.product_id == Product.id)
results = query.all()

# 遍历结果
for user, order, product in results:
    print(user.username, order.order_id, product.name)  # 假设Product表有一个name字段
 

参考:

如何在SQLAlchemy中实现多表联合查询_sqlalchemy 对子查询join-CSDN博客

http://www.xdnf.cn/news/12004.html

相关文章:

  • 学习路之php--性能优化
  • Linux信号捕捉技术深度解析
  • html-pre标签
  • 解锁Java线程池:性能优化的关键
  • Spring Boot缓存组件Ehcache、Caffeine、Redis、Hazelcast
  • 在 Ubuntu 24.04 LTS 上安装 Jenkins 并配置全局工具(Git、JDK、Maven)
  • 余氯传感器在智慧水务系统中如何实现IoT集成
  • 数字证书_CA_详解
  • 超越传统:AAT Bioquest Calbryte探针的高信噪比与快速动力学特性解析
  • 实时数据仓库是什么?数据仓库设计怎么做?
  • 攻防世界-XCTF-Web安全最佳刷题路线
  • Hadolint:Dockerfile 语法检查与最佳实践验证的终极工具
  • JVM 类初始化和类加载 详解
  • 相机Camera日志分析之二十五:高通相机Camx 基于预览1帧的process_capture_request四级日志分析详解
  • STM32中自动生成Flash地址的方法
  • 昇腾+ds+dify部署
  • 基于SpringBoot和PostGIS的OSM时空路网数据入库实践
  • 服务器CPU被WMI Provider Host系统进程占用过高,导致系统偶尔卡顿的排查处理方案
  • Spring AI学习一
  • qt network 整体框架
  • 将图形可视化工具的 Python 脚本打包为 Windows 应用程序
  • 【安全攻防与漏洞】​​量子计算对HTTPS的威胁:后量子密码学进展
  • MyBatis-Plus LambdaQuery 高级用法:JSON 路径查询与条件拼接的全场景解析
  • Linux系统-基本指令(6)
  • Python 多线程编程全面学习指南
  • 优化技巧--滑动窗口
  • AI物体识别原理综述与Auto Drive实践
  • 光学系统常用光学参数的测量
  • 武汉火影数字|互动多媒体展项打造:开启沉浸式互动体验
  • python打卡训练营打卡记录day44