我希望SQLAlchemy生成以下SQL代码:
SELECT t171 AS "3Harm" FROM production
我一直在玩类似于这个SQLAlchemy ORM片段:
session.query(Production.t171.label('3harm'))
这里的问题是,这在生成的SQL中没有正确引用“3harm”。而不是"3harm"
这会生成不带引号的3harm
,这是无效的,因为它以数字字符开头,因此会引发以下Oracle异常:
ORA-00923: FROM keyword not found where expected
我可以通过大写别名中的任何字符来实现这一点:
session.query(Production.t171.label('3Harm'))
但是我仍然希望使用所有小写列名,因为我的程序的其余部分都是标准化的所有小写。知道如何强制引用小写版本吗?
答案 0 :(得分:1)
在寻找其他东西时找到解决方案。
任何列都可以强制使用column.quote = True
的引号。
因此对于原始示例:
column = Production.t171.label('3harm')
column.quote = True
session.query(column)
成功!
答案 1 :(得分:0)
您要生成的SQL无效;而不是这个:
SELECT t171 AS '3Harm' FROM production
...您需要将标识符括在双引号中,而不是单引号:
SELECT t171 AS "3Harm" FROM production
所以看起来你应该能够做到这一点:
session.query(Production.t171.label('"3harm"'))
或者也许:
session.query(Production.t171.label("3harm"))
但我不使用SQLAlchemy而且我没有办法检查其中是否有效;例如,你可能需要转义第一个中的双引号,但是this或许第二个更有可能工作......而且我不明白为什么3Harm
可以不引用。