sqlalchemy 在 Oracle DB 上连接超过 2 个元素
sqlalchemy concat with more than 2 elements on Oracle DB
考虑以下 table 定义
meta = MetaData()
tgd = Table('T_GROUP_DAT', meta,
Column('C_ID'),
Column('CLASS_CODE'))
我使用 sqlalchemy.sql.functions.concat
和 3 个语句
创建了一个 select 语句
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"
生成。但是,当我 运行 this 时,异常 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-查询的可读性大大降低。有没有一种方法可以使用 |
oparator 创建查询,或者使用 sqlalchemy
针对这种情况创建更具可读性的 sql 查询
在 Oracle 中,CONACT 函数只接受 2 个值。
使用||
连接任意数量的列很容易,如下所示:
select col1 || ' ' || col2 || ' ' || col3 ...
from your_table;
干杯!!
要创建具有 2 个以上参数的连接 +
可以使用运算符:
tgd_q1 = select([tgd.c.C_ID + '-' + tgd.c.CLASS_CODE])
导致这样的 ||
连接查询
select c_id || '-' || class_code from t
考虑以下 table 定义
meta = MetaData()
tgd = Table('T_GROUP_DAT', meta,
Column('C_ID'),
Column('CLASS_CODE'))
我使用 sqlalchemy.sql.functions.concat
和 3 个语句
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"
生成。但是,当我 运行 this 时,异常 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-查询的可读性大大降低。有没有一种方法可以使用 |
oparator 创建查询,或者使用 sqlalchemy
在 Oracle 中,CONACT 函数只接受 2 个值。
使用||
连接任意数量的列很容易,如下所示:
select col1 || ' ' || col2 || ' ' || col3 ...
from your_table;
干杯!!
要创建具有 2 个以上参数的连接 +
可以使用运算符:
tgd_q1 = select([tgd.c.C_ID + '-' + tgd.c.CLASS_CODE])
导致这样的 ||
连接查询
select c_id || '-' || class_code from t