在 sqlalchemy 中的查询级别连接列

Posted

技术标签:

【中文标题】在 sqlalchemy 中的查询级别连接列【英文标题】:concatenating columns at query level in sqlalchemy 【发布时间】:2013-06-23 22:17:16 【问题描述】:

在sqlalchemy中查询时可以合并两列吗?

例如,我有下表:

table 1                      table 2
col1   col2   col3           col1   col2  col3
A       123     1             ABC    A1B2
B       456     2             DEF    C3D4
C       789     3             GHI    E5F6

我希望我的查询看起来像这样:

 session.query(table.col3, (table1.col2 + table2.col2)).join(table2)

并希望得到以下结果:

(1, 123A1B2)
(2, 456C3D4)
(3, 789E5F6)

我该怎么做呢?

【问题讨论】:

【参考方案1】:

当然取决于数据库和类型;如果table1.col2 是一个数字,那么您可能想尝试一下:

from sqlalchemy.sql import expression, functions
from sqlalchemy import types

... functions.concat(
    expressions.cast(table1.col2, types.Unicode), table2.col2) ...

通常,+ 运算符应适用于 2 个文本列。

【讨论】:

我正在使用 sqlite,table1.col2 是一个 int,table2.col2 实际上是一个日期,但我希望它是一个字符串,我只是想将它用作关系唯一 ID,在我的查询。但实际上我意识到这不是我想要做的事情的方式..但我一直想知道如何实现这一点,因为在原始 SQL 中它不会很困难。我只会做 tbl1.col2 & tbl.col2 但在 sqlalcehmy 它返回 TRUE。不知道为什么。 它返回 true 因为 & 在 sqlalchemy 中是布尔和运算符 这个答案的文档在哪里?

以上是关于在 sqlalchemy 中的查询级别连接列的主要内容,如果未能解决你的问题,请参考以下文章

基础入门_Python-模块和包.深入SQLAlchemy之列级别约束与表级别约束?

python连接数据库使用SQLAlchemy

将 SQL 查询限制为 Graphene-SQLAlchemy 中定义的字段/列

如何在 Sqlalchemy 中正确使用 SQL 连接/子查询

Sql 完全外连接查询在 SQLAlchemy 中不起作用

如何在sqlalchemy中选择多列连接的特定列?