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

时间:2017-02-16 13:23:21

标签: python sql sql-server pymssql

我正在使用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之后,似乎我应该使用一组元组,但我无法找到使其工作的方法。

提前谢谢

2 个答案:

答案 0 :(得分:3)

试试这个:

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

答案 1 :(得分:1)

我会用format()写这个,如果我是懒惰的那样“

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

或者更准确地使用参数:

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

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