Flask-SQLAlchemy - 不使用外键连表查询。记得常回来看我
前言
相比于 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 == '').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
博客搬运地址
- Flask-SQLAlchemy 操作 - 连表查询 - 筛选字段
- flask sqlalchemy非外键连接两个表
- Python sqlalchemy 多表查询 没有外键
- sqlalchemy多表联合查询
- 在 Flask-SQLAlchemy 中联表查询 - (目测是真正的大佬)
Flask-SQLAlchemy - 不使用外键连表查询。记得常回来看我的更多相关文章
- 【Hibernate】无外键多表查询
无外键多表查询时编写hql,直接使用逗号分隔表,where作为联合查询条件进行查询.查询出来的结果可为两种,List<List<Object>>或者List<Map< ...
- 主外键多表查询demo
https://www.cnblogs.com/DragonFire/p/6949767.html mySQL练习-主外键多表查询 MySQL练习-主外键多表查询 练习: 1.建立表关系: 请创建如下 ...
- mysql外键与表查询
目录 自增特性 外键 外键关系 外键创建 外键的约束效果 级联更新级联删除 多对多关系 一对一关系 表查询关键字 select与from where筛选 group by分组 练习 关系练习 查询练习 ...
- MySQL练习-主外键多表查询
练习: 1.建立表关系: 请创建如下表,并创建相关约束 USE db1; CREATE TABLE class( cid INT AUTO_INCREMENT PRIMARY KEY, caption ...
- sqlalchemy外键和relationship查询
前面的文章中讲解了外键的基础知识和操作,上一篇文章讲解了sqlalchemy的基本操作.前面两篇文章都是作为铺垫,为下面的文章打好基础.记得初一时第一次期中考试时考的不好,老爸安慰我说:“学习是一个循 ...
- oracle查询某张表的外键,并用 truncate 命令有外键的表中的数据
注:本文来源于<oracle查询某张表的外键(最终解决办法)> 一:几个查询表外键的脚本 select b.table_name, b.column_name from user_cons ...
- 删除带外键的表【foreign key constraint fails】报错
title: 删除带外键的表[foreign key constraint fails]报错 date: 2018-08-02 21:59:06 tags: 数据库 --- 遥想当时正在学hibern ...
- MySQ-表关系-外键-修改表结构-复制表-03
目录 前言 不合理的表结构(案例) 带来的问题 如何解决问题? 如何确定表关系? 表关系 一对多 多对多 一对一 应用场景 判断表关系最简单的语法 三种关系常见案例 如何建立表关系? 外键 forei ...
- SQL主外键和子查询
主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个 ...
随机推荐
- Poj 2187 凸包模板求解
Poj 2187 凸包模板求解 传送门 由于整个点数是50000,而求凸包后的点也不会很多,因此直接套凸包之后两重循环即可求解 #include <queue> #include < ...
- About SQL Server 2016 CPT2
SQL Server 2016 CTP2已经发布,可以从以下主页进行下载. http://www.microsoft.com/en-us/server-cloud/products/sql-serve ...
- css伪类实现文字两侧划线效果
css伪类实现文字两侧划线效果,效果如下: 代码如下: <!DOCTYPE HTML> <html> <head> <title> css伪类的学习 & ...
- 九度oj 题目1054:字符串内排序
题目1054:字符串内排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:10985 解决:5869 题目描述: 输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串 ...
- expdp,impdp,include,exclude
The examples below are based on:- the demo schema SCOTT that is created with script: $ORACLE_HOME/rd ...
- cogs——21. [HAOI2005] 希望小学
21. [HAOI2005] 希望小学 ★★ 输入文件:hopeschool.in 输出文件:hopeschool.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述 ...
- IE11 文档模式空白
环境描述: win7 64位系统 安装了 更新 IE11-Windows6.1-KB2929437-x64.IE11-Windows6.1-KB3008923-x64 解决方案: 卸载 IE11-Wi ...
- top命令查看线程信息和jstack使用介绍
top -Hp pid可以查看某个进程的线程信息 -H 显示线程信息,-p指定pid jstack 线程ID 可以查看某个线程的堆栈情况,特别对于hung挂死的线程,可以使用选项-F强制打印dump信 ...
- CSS3的animation功能
旋转动画 <img src="https://facebook.github.io/react/img/logo.svg" class="App-logo" ...
- java STW stop the world 哈哈就是卡住了
java STW stop the world 哈哈就是卡住了 学习了:http://www.jb51.net/article/125400.htm