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

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.lqws.cn/news/151651.html

相关文章:

  • AppWeb
  • JavaSec-XSS
  • 如何防止看板任务长期停滞不前
  • Ubuntu中常用的网络命令指南
  • html文字红色粗体,闪烁渐变动画效果
  • 在Spring Boot 3.3中使用Druid数据源及其监控功能
  • 分析vban的utlis中的helper方法(1)——数组
  • Linux-07 ubuntu 的 chrome 启动不了
  • Ubuntu ifconfig 查不到ens33网卡
  • 【Android基础回顾】三:Android启动流程
  • 44、web实验-后台管理系统基本功能
  • CentOS 7 如何pip3安装pyaudio?
  • 【ArcGIS应用】ArcGIS‌应用如何进行影像分类?
  • Eureka REST 相关接口
  • OpenAI技术路线急转:从TypeScript到Rust的Codex CLI重构内幕
  • Java八股文——集合「List篇」
  • 深度学习习题2
  • 10_聚类
  • vlan(虚拟局域网)逻辑图解+实验详解
  • ceph pool 修改故障域
  • 并发编程 - go版
  • android知识总结
  • 深入学习RabbitMQ队列的知识
  • RabbitMQ实用技巧
  • Soundprivacy
  • hbase资源和数据权限控制
  • 通过BUG(prvIdleTask、pxTasksWaitingTerminatio不断跳转问题)了解空闲函数(prvIdleTask)和TCB
  • 8.axios Http网络请求库(1)
  • Cilium动手实验室: 精通之旅---4.Cilium Gateway API - Lab
  • C# 中的 IRecipient