在Python ibm_db WHERE IN条件中将列表绑定为参数

时间:2018-12-14 15:12:54

标签: python db2

我可以使用Python列表绑定到ibm_db中的WHERE IN参数的任何方式吗?

基本上是这样的:

fn foo(file: &OsStr) {
    Command::new("bar")
        .args(&["baz", "qux", file.to_str().unwrap()])
        .spawn();
}

但是这不起作用。谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

参数化in值是跨不同驱动程序的常见问题,python-ibmdb也不例外。您无法直接参数化每个占位符的值列表。

您将必须动态定义所需数量的占位符,然后将其绑定。遵循以下原则:

values = ['first.txt', 'second.txt']

placeholders = ",".join("?" for _ in values)
sql = """
SELECT * 
FROM TABLE 
WHERE FILE_NAME IN ({placeholders)""".format(placeholders=placeholders)

stmt = ibm_db.prepare(conn, sql)

for index, value in enumerate(values):
    imb_db.bind_param(stmt, index, value)