Python SQLAlchemy在一个查询中加载多个orm模型?
是否可以加载来自单个查询的结果,并根据某些条件将行映射到不同的模型 上下文 我的用例:Python SQLAlchemy在一个查询中加载多个orm模型?,python,sqlalchemy,Python,Sqlalchemy,是否可以加载来自单个查询的结果,并根据某些条件将行映射到不同的模型 上下文 我的用例: 跨两个表执行全文搜索 对结果进行排序 使用偏移/限制对组合结果进行分页 例子 为了简单起见,忽略搜索方面,让我们假设以下表格: 创建表日志( id整数主键, 巴迪·瓦查尔, 搜索排名真实 ); 创建表注释( id整数主键, 巴迪·瓦查尔, 搜索排名真实 ); 对于一些示例行: 插入blogposts值(1,'foo',0.2); 插入注释值(1,'条形',1.2); 这些声明性模型: 来自sqlalc
- 跨两个表执行全文搜索
- 对结果进行排序
- 使用偏移/限制对组合结果进行分页
创建表日志(
id整数主键,
巴迪·瓦查尔,
搜索排名真实
);
创建表注释(
id整数主键,
巴迪·瓦查尔,
搜索排名真实
);
对于一些示例行:
插入blogposts值(1,'foo',0.2);
插入注释值(1,'条形',1.2);
这些声明性模型:
来自sqlalchemy导入列,整数,浮点,字符串
从sqlalchemy.ext.declarative导入声明性基础
Base=声明性_Base()
类博客帖子(基本):
__tablename_u=“blogposts”
id=列(整数,主键=True)
body=列(字符串)
搜索排名=列(浮动)
类注释(基本):
__tablename_=“comments”
id=列(整数,主键=True)
body=列(字符串)
搜索排名=列(浮动)
在SQL中,我可以合并两个表的结果,并按如下方式对它们进行排序/分页:
SELECT 'blogpost' AS type, id, search_rank FROM blogposts
UNION
SELECT 'comment' AS type, id, search_rank FROM comments
ORDER BY search_rank DESC OFFSET 0 LIMIT 100
/* =>
type | id | search_rank
----------+----+-------------
comment | 1 | 1.2
blogpost | 1 | 0.2
(2 rows)
*/
使用SQLAlchemy,我还可以获得原始结果:
结果=(
session.query(
文字(“blogpost”)。标签(“类型”),
Blogpost.id,
Blogpost.search\u rank.label(“search\u rank”)
)
.union(session.query)(
文字(“注释”)。标签(“类型”),
Comment.id,
注释.搜索排名.标签(“搜索排名”)
))
.order_by(文本(“搜索排名描述”))
.偏移量(0)
.限额(100)
.all()
)
结果
#=>[('comment',1.2),('blogpost',1.0.2)]
问题:
我是否可以使用SQLAlchemy查询
构造将这些映射到Blogpost
/注释
实例