手动转义原始SQL的字符串

时间:2014-09-02 06:41:34

标签: python postgresql sqlalchemy

我有一个使用SqlAlchemy执行的原始SQL语句。该查询包含:

FROM unnest(array['sku1', 'sku2', 'sku3'])

手动构建查询,我找不到手动转义每个参数的方法。

我尝试过:

session.execute("... FROM unnest(array[:skus]) ...", {'skus': skus})

但:

ProgrammingError: (ProgrammingError) a column definition list is required for functions returning "record"
LINE 21:         FROM unnest(array[('sku1', 'sku2', '...
                      ^

2 个答案:

答案 0 :(得分:2)

Python tuple适用于Postgresql record和适用于list的{​​{1}}。这就是为什么在这种情况下元组无效。

但你所说的in your own answer无效:

array

或者你的意思是

select unnest(['BA007EWCBD43', "KA036'AGHF550", 'KA036ACBK873']);
ERROR:  syntax error at or near "["
LINE 1: select unnest(['BA007EWCBD43', "KA036'AGHF550", 'KA036ACBK87...

绝不应手动转义参数。让它给司机。

答案 1 :(得分:0)

好的,如果我放了list skus(不是tuple),一切都很好:

session.execute("... FROM unnest(:skus) ...", {'skus': ['BA007EWCBD43', 'KA036\'AGHF550', 'KA036ACBK873']})

生成:

FROM unnest(['BA007EWCBD43', "KA036'AGHF550", 'KA036ACBK873'])

虽然其他情况仍然需要手动引用参数的功能。