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

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.lryc.cn/news/2402105.html

相关文章:

  • 深度学习和神经网络 卷积神经网络CNN
  • 用 NGINX 构建高效 POP3 代理`ngx_mail_pop3_module`
  • 解决:如何在Windows adb使用dmesg | grep检查内核日志
  • PlayWright | 初识微软出品的 WEB 应用自动化测试框架
  • Mac电脑_钥匙串操作选项变灰的情况下如何删除?
  • Git Patch 使用详解:生成、应用与多提交合并导出
  • 2025前端微服务 - 无界 的实战应用
  • Spring Boot 缓存注解详解:@Cacheable、@CachePut、@CacheEvict(超详细实战版)
  • 【设计模式-4.8】行为型——中介者模式
  • SpringCloud-基于SpringAMQP实现消息队列
  • ObjectMapper 在 Spring 统一响应处理中的作用详解
  • H5移动端性能优化策略(渲染优化+弱网优化+WebView优化)
  • 【汇编逆向系列】二、函数调用包含单个参数之整型-ECX寄存器,LEA指令
  • 行列式的性质
  • 联软NSPM自动化策略管理 助力上交所加速国产化替代提升运维效率
  • Flask + ECharts+MYSQL物联网数字化大屏
  • 业务到解决方案构想
  • 数据库系统概论(十六)数据库安全性(安全标准,控制,视图机制,审计与数据加密)
  • vue3从入门到精通(基础+进阶+案例)
  • 【Linux 学习计划】-- 系统中进程是如何调度的(内核进程调度队列)
  • gemini和chatgpt数据对比:谁在卷性能、价格和场景?
  • C#、VB.net——如何设置窗体应用程序的外边框不可拉伸
  • 基于SpringBoot的房屋租赁系统的设计与实现(thymeleaf+MySQL)
  • Spring Boot统一功能处理深度解析
  • 世事无常,比较复杂,人可以简单一点
  • 使用 Docker Compose 安装 PostgreSQL 16
  • 每日算法刷题Day23 6.5:leetcode二分答案3道题,用时1h40min(有点慢)
  • 【Android基础回顾】七:内存管理机制
  • 数据结构哈希表总结
  • Spring事务失效-----十大常见场景及解决方案全解析