Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy在一个查询中加载多个orm模型?_Python_Sqlalchemy - Fatal编程技术网

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
/
注释
实例