sqlalchemy concat在Oracle DB上具有两个以上的元素

问题描述 投票:0回答:1

考虑下表定义

meta = MetaData()

tgd = Table('T_GROUP_DAT', meta,
            Column('C_ID'),
            Column('CLASS_CODE'))

[我使用带有3条语句的sqlalchemy.sql.functions.concat创建一个选择语句

tgd_q1 = select([functions.concat(tgd.c.C_ID, '-', tgd.c.CLASS_CODE)])

使用中

tgd_q1.compile(dialect=OracleDialect(), compile_kwargs={"literal_binds": True}))

查询

SELECT concat("T_GROUP_DAT"."C_ID", "T_GROUP_DAT"."CLASS_CODE") AS concat_1
FROM "T_GROUP_DAT"

已生成。但是,当我运行此命令时,将引发异常ORA-00909: invalid number of arguments。这是因为CONCAT(https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions026.htm)仅允许2个参数。

我现在的解决方法是在concat内使用concat,这有效

tgd_q1 = select([functions.concat(functions.concat(tgd.c.C_ID,'-'),tgd.c.CLASS_CODE)])

但是,这会使生成的sql查询的可读性大大降低。有没有一种方法可以使用|省略器来创建查询,或者使用sqlalchemy为此情况创建更易读的sql查询]

考虑以下表定义meta = MetaData()tgd = Table('T_GROUP_DAT',meta,Column('C_ID'),Column('CLASS_CODE'))我使用...创建了一个选择语句。]] >

在Oracle中,CONACT函数仅采用2个值。

很容易使用||来按如下方式连接任意数量的列:

select col1 || ' ' || col2 || ' ' || col3 ...
from your_table;

干杯!

python sql oracle sqlalchemy concat
1个回答
0
投票

在Oracle中,CONACT函数仅采用2个值。

© www.soinside.com 2019 - 2024. All rights reserved.