如何在sqlalchemy中创建基于文字的查询?

时间:2011-09-14 05:50:52

标签: python sql sqlalchemy

我为create expression

创建了一个函数
def test(operator1, operation, operator2):
    return literal_column(operator1).op(operation)(operator2)

现在我用

打电话
test(1, '=', 1)

然后它起作用

但是当我通过时

test('abc', '=', 'abc')

然后它给出了abc不是列的错误。

我试图转换它

def test(operator1, operation, operator2):
    return literal_column(operator1, String).op(operation)(operator2)

但那不起作用。

如果我用

打电话,这将有效
test("'abc'", '=', 'abc')

有没有办法获得operator1的类型,在这个基础上我们可以创建literal_colum,它将映射到相同类型的内容?

1 个答案:

答案 0 :(得分:2)

任何文字值都可以转换为表达式构造:

from sqlalchemy import literal_column, bindparam


# ? = ?, 1 will be bound
bindparam(1) == bindparam(1)

# " 1 = 1", literals rendered inline (no quoting is applied !!)
literal_column(str(1)) == literal_column(str(1))