Python Oracle DB上有2个以上元素的sqlalchemy concat

Python Oracle DB上有2个以上元素的sqlalchemy concat,python,sql,oracle,sqlalchemy,concat,Python,Sql,Oracle,Sqlalchemy,Concat,考虑下表定义 meta = MetaData() tgd = Table('T_GROUP_DAT', meta, Column('C_ID'), Column('CLASS_CODE')) 我使用带有3条语句的sqlalchemy.sql.functions.concat创建了一条select语句 tgd_q1 = select([functions.concat(tgd.c.C_ID, '-', tgd.c.CLASS_CODE)])

考虑下表定义

meta = MetaData()

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

我使用带有3条语句的
sqlalchemy.sql.functions.concat
创建了一条select语句

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

询问

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()只允许2个参数

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

tgd_q1 = select([functions.concat(functions.concat(tgd.c.C_ID,'-'),tgd.c.CLASS_CODE)])
但是,这使得生成的sql查询的可读性大大降低。有没有一种方法可以使用opator创建查询,或者使用sqlalchemy为这种情况创建更可读的sql查询?在Oracle中,函数只取2个值

使用
|
可以很容易地将任意数量的列合并为以下列:

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

干杯

要创建包含2个以上参数的concat,可以使用
+
运算符:

tgd_q1 = select([tgd.c.C_ID + '-' + tgd.c.CLASS_CODE])
导致一个像这样的
|
连接查询

select c_id || '-' || class_code from t

谢谢你的回答。我的意思是如何使用Pyton中的sqlalchemy创建一个类似于您的语句。我澄清了这个问题。为了记录在案,这个答案在sqlite上也是有效的。
select c_id || '-' || class_code from t