带有字符串值的 SqlObject 和 SqlBuilder IN() 函数

SqlObject and SqlBuilder IN() function with string values

作为我的第一个 post 在这里,我想警告我,我在网上看起来和我一样好,但没有解决它。

我正在使用 python 2.7 和最新版本的 sqlobject 库。

我遇到过,当使用字符串列表或元组调用 IN() 函数时,您得到的结果看起来像错误:

from sqlobject.sqlbuilder import table, IN

t = table.MyTable
print(IN(t.s_ID, ("1", "2")))
>>> <SQLOp 34ec648L>

虽然使用整数似乎效果更好:

print(IN(t.s_ID, (1, 2)))
>>>> ((MyTable.s_ID) IN (1, 2))

有没有人知道为什么这不起作用?我更多地考虑了 lib 中的一个问题,但也许我遗漏了一些东西

提前致谢!

注意:在这种情况下我不认为它很重要(因为我只想构建查询)但我希望将此查询发送到 SQL Server 2012

D. FE.

看起来你的两个陈述都是正确的。但是第一个(包括字符串)的表示是依赖于数据库的——它取决于字符串在每个特定数据库的查询中是如何呈现的(它们是如何被引用、转义等)。因此,如果没有适当的 db-aware 对象(如连接或模型),它就不能转换为字符串——具有 sqlrepr 方法的对象。在下一个示例中,__connection__ 对象是一个 postgresql 连接:

>>> print(__connection__.sqlrepr(IN(t.s_ID, ("1", "2")))
((MyTable.s_ID) IN ('1', '2'))