前言

相比于 Django 的 ORM ,SQLAlchemy "不依靠外键进行跨表联查" 的解决方案就比较多。

没啥好说的,只能怪自己学艺不精..  _(:з」∠)_

解决办法

query = database.session().query(models.A, models.B)
query = query.join(models.B, models.B.UUID == models.A.UUID).filter(models.a.UUID == '2018061520180621').filter(models.b.xx= 'haha')
# 第二个filter可以继续过滤、join 或者删掉..
data = query.all()
>>>  print ( type(data) )
<class 'sqlalchemy.util._collections.result'># 然而:
#   列表中的项并不是标准的 Python tuple,<class 'sqlalchemy.util._collections.result'>,它是一个 AbstractKeyedTuple 对象,拥有一个 keys() 方法,
# 这样可以很容易将其转换成 dict :
list = [dict(zip(result.keys(), result)) for result in data]
print(jsonify(list))

# 还可以在 filter 得到结果后继续加 join 进行多表联查

按用户名摸糊查询

trans_details.query.join( models.B, models.A.user_id==models.B.id ).filter(Users.username.like('%xx%')) #select xxx from trans_details inner join trans_details on users.id=trans_details.user_id where users.username like '%xx%'

左外联接(left join),没有内容显示为null

trans_details.query.outerjoin(User).filter(Users.username.like('%xx%'))
#select xxx from trans_details left outer join trans_details on users.id=trans_details.user_id where users.username like '%xx%'

神秘代码

from flask import jsonify-- article_view.py
@api.route('/get')
def get_article():dic = {"data": []}# 单表查询# data = db.session.query(models.TbArticle).all()# data = db.session.query(models.TbArticle, models.TbArticleContent)# data.join(models.TbArticle, models.TbArticle.uuid == models.TbArticleContent.uuid)# 另一种诡异的写法,没试过# results = (#     db.session.query(#         Topic.content.label('topic_content'), Reply.content.label('reply_content')#         )#     ).select_from(Topic, Reply).filter(Topic.id == Reply.topic_id).paginate(page, per_page)# 上文的写法query = db.session().query(models.TbArticle, models.TbArticleContent)query = query.join(# 取出所有models.TbArticleContent, models.TbArticleContent.uuid == models.TbArticle.uuid)# 过滤出 TbArticle.uuid : [tuple]# .filter(models.TbArticle.uuid == '0553857835404640804')# 自定义显示字段:[]# .with_entities(#     models.TbArticle.uuid, models.TbArticle.title, models.TbArticleContent.content# )
data = query.all()data_list 数据结构:[{"TbArticle": <TbArticle 2312>, "TbArticleContent": <TbArticleContent 0553857835404640804>},{}]data_list = [dict(zip(result.keys(), result)) for result in data]dic["data"].extend(data_list)print(data_list)# 取出字典中的对象:# for i in data_list:#     print(i["TbArticle"].create_time)#     print(i["TbArticleContent"].Content)# for obj in data:#     # dic["data"].append({"uuid": obj.uuid, "title": obj.title})#     print(type(obj))# return jsonify(dic)return jsonify("ok")查询出的结果/对象:
# from sqlalchemy.util._collections import result

View Code

博客搬运地址

  1. Flask-SQLAlchemy 操作 - 连表查询 - 筛选字段
  2. flask sqlalchemy非外键连接两个表
  3. Python sqlalchemy 多表查询 没有外键
  4. sqlalchemy多表联合查询
  5. 在 Flask-SQLAlchemy 中联表查询 - (目测是真正的大佬)

转载于:https://www.cnblogs.com/clement-jiao/p/10010497.html

Flask-SQLAlchemy - 不使用外键连表查询。记得常回来看我相关推荐

  1. Flask之sqlalchemy过滤、外键和表单关系

    一.过滤条件 过滤是数据提取的一个很重要的功能,以下对一些常用的过滤条件进行解释,并且这些过滤条件都是只能通过filter方法实现的 equals query.filter(User.name == ...

  2. mysql根据外键多条件查询_MySQL练习-主外键多表查询

    练习: 1.建立表关系: 请创建如下表,并创建相关约束 1USE db1;2 CREATE TABLE class(3cid INT AUTO_INCREMENT PRIMARY KEY,4 capt ...

  3. SQLAlchemy的使用---外键ForeignKey数据库创建与连接

    SQLAlchemy的使用---外键ForeignKey数据库创建与连接 # 一对多建表操作 from sqlalchemy.ext.declarative import declarative_ba ...

  4. sqlalchemy外键和relationship查询

    前面的文章中讲解了外键的基础知识和操作,上一篇文章讲解了sqlalchemy的基本操作.前面两篇文章都是作为铺垫,为下面的文章打好基础.记得初一时第一次期中考试时考的不好,老爸安慰我说:"学 ...

  5. 3,外键之表关联关系,修改表,复制表

    今日内容:   一:外键    一对多:    多对多:    一对一:   二:了解知识点    复制表    修改表相关操作       前戏:    所有的信息都在一张表中所带来的的问题     ...

  6. 删除oracle所有表外键,Oracle中查询、禁用、起用、删除表外键

    Oracle中查询.禁用.启用.删除表外键 1.查询所有表的外键: select table_name, constraint_name from user_constraints where con ...

  7. mysql 删除表数据_主外键关联表的数据删除策略

    说个题外话,我从来没想过会被拼多多这款软件所魔怔,他的这种社交营销的能力,实在是太强了,在怂恿之下,开始给儿子拼个这个, 各位有空帮砍下,https://w.url.cn/s/AzlPAB9,或者扫下 ...

  8. oracle 外键子查询,外键、联合查询、子查询

    1.外键: 增加外键 创建表的时候增加外键:在所有的表字段之后,使用foreign key(外键字段) references 外部表(主键字段) 在新增表之后增加外键:修改表结构,使用alter ta ...

  9. Python sqlalchemy orm 多外键关联

     多外键关联 注:在两个表之间进行多外键链接 如图: 案例: # 创建两张表并添加外键主键 # 调用Column创建字段 加类型 from sqlalchemy import Integer, For ...

  10. sqlalchemy_外键连接表

    import sqlalchemy from sqlalchemy import create_engine #连接数据库from sqlalchemy.ext.declarative import ...

最新文章

  1. 常见面试题:为什么MySQL索引要用B+Tree呢?(看完你就能和面试官笑谈人生了)
  2. unicode字符串 转 中文
  3. k8s安装kubesphere的环境准备:资源规划、默认存储类StorageClass(nfs-client-provisioner)
  4. Hibernate第一次课(2)---Hibernate原理简介
  5. Eclipse里web的依赖工程部署的简便方法
  6. mysql5.6热升级_Mysql5.6主从热备配置
  7. 项目宝提供的服务器,开源WebSocket服务器项目宝贝鱼CshBBrain V4.0.1 和 V2.0.2发布
  8. 【Jmeter篇】你有Fiddler、Charles抓包,我有Jmeter录制Web和App端
  9. java低配电脑运行,学会这几招,低配电脑用着也不卡啦!真心的实用 ,真是好方法。...
  10. Java可以用到军事方面吗_恭喜遥三运载火箭发射成功,浅谈java在军事方面的运用!...
  11. 排序(1):冒泡排序
  12. 向量间的距离和范数到线性空间、赋范空间、內积空间
  13. ajaxSubmit 提交form 表单
  14. 基于STM32构建EtherCAT主站(SOEM方案)2
  15. 安卓App启动流程详解
  16. SPSS应用多元逻辑回归解决无序多分类问题
  17. 桌面计算机密码修改频率,教大家如何更改电脑的显示频率
  18. C++中deprecated笔记
  19. 书法文化类毕业论文文献都有哪些?
  20. 微信小程序入门开发教程(详解)

热门文章

  1. ZOJ 2412 Farm Irrigation
  2. 使用一个DataContext,还是多个?
  3. 添加Copy To和Move To 到系统右键菜单中(Vista 也适用)
  4. Maven—Eclipse中配置Maven
  5. SVN—如何安装SVN服务器端软件
  6. Spring中EmptyResultDataAccessException异常产生的原理及处理方法
  7. 项目运行报‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件“
  8. 错误:java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
  9. 深入学习Java中的字符串,代码点和代码单元
  10. banner 获取当前指示物_ConvenientBanner使用指南