【发布时间】:2020-01-27 08:53:26
【问题描述】:
考虑下表定义
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"
生成。但是,当我运行它时,会抛出异常 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 查询
【问题讨论】:
标签: python sql oracle sqlalchemy concat