如何在未确定数量的参数上使用 LIKE 和 % 和 pymssql?

Posted

技术标签:

【中文标题】如何在未确定数量的参数上使用 LIKE 和 % 和 pymssql?【英文标题】:how to use LIKE and % with pymssql on an undetermined number of parameters? 【发布时间】:2017-02-16 13:23:21 【问题描述】:

我正在使用 pymssql 连接到数据库。 该数据库有一个表,其中有一个列(我们称之为 col),所有字符串都是 64 个字符长。 (例如:"John ")。 现在我想在数据库中找到 John。我尝试使用LIKE。 当我对名称进行硬编码时,它可以完美运行:

cursor.execute("SELECT * FROM table WHERE col LIKE 'John%' ") // gives perfect results

但是当我使用%s 尝试它时,这似乎不匹配。

cursor.execute("SELECT * FROM table WHERE col LIKE '%s%' ",(0,"John")) // gives Nothing
cursor.execute("SELECT * FROM table WHERE col LIKE '%s%' ",0:"John") // gives SQL "Incorrect syntax" error
cursor.execute("SELECT * FROM table WHERE col LIKE '%s%' " % 0:"John") // gives unsupported format error

如果我只想匹配一列,这将有效:

cursor.execute("SELECT * FROM table WHERE col LIKE '%s%' ", "John") // gives all Johns

但我想在未确定数量的列上进行匹配。 有没有办法查看最终查询的样子,以便我可以尝试自己调试它。或者你知道如何使用许多参数。 在查看here 之后,似乎我应该使用一个元组数组,但我找不到让它工作的方法。

提前谢谢你

【问题讨论】:

【参考方案1】:

试试这个:

cursor.execute("SELECT * FROM table WHERE col LIKE %s ", "John%")

【讨论】:

【参考方案2】:

如果我很懒,我会使用format() 来写这篇文章”

cursor.execute("SELECT * FROM table WHERE col LIKE '0%' ".format("John") )

或更正确地使用参数:

cursor.execute("SELECT * FROM table WHERE col LIKE '%s%' ", ("John"))

我认为问题在于(0, "John") 被解释为两个参数,而不是一个。

【讨论】:

以上是关于如何在未确定数量的参数上使用 LIKE 和 % 和 pymssql?的主要内容,如果未能解决你的问题,请参考以下文章

如何在未定义上使用/控制错误传播运算符

使用 3 个值中确定的参数值创建特定数量的代理

如何创建函数来获取不确定数量的参数但成对?

SQL like

如何有效地实现类似 SO 的收藏和投票功能?

C/C++中的可变参数和可变参数模板