sqlalchemy 与 Oracle DB 上的 2 个以上元素连接



考虑下表定义

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 查询

要创建具有 2 个以上参数的 concat,可以使用运算符+

tgd_q1 = select([tgd.c.C_ID + '-' + tgd.c.CLASS_CODE])

生成如下所示的||连接查询

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

在 Oracle 中,CONACT 函数只接受 2 个值。

使用||很容易连接任意数量的列,如下所示:

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

干杯!!

相关内容

最新更新