2017-02-16 4 views
2

Я использую pymssql для подключения к базе данных. В этой базе данных есть стол, в котором есть столбец (назовем его col), ведь все строки имеют длину 64 символа. (например: "John "). Теперь я хочу найти Джона в базе данных. Я попытался использовать LIKE. Когда я жёстко имя работает отлично:как использовать LIKE и% с pymssql по неопределенному числу параметров?

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

Попробуйте следующее:

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

Я хотел бы написать это с помощью format(), если бы я лениться»

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

Или более правильно, используя параметры:

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

Я думаю, что вопрос что (0, "John") интерпретируется как два параметра, а не один.