Python Odbc: мой запрос не работает, когда я ставлю подстановочные знаки типа ‘%’

#python #sql #pyodbc

#python #sql #pyodbc

Вопрос:

Я попытался выполнить запрос, используя этот код:

 SELECT MES_User_ID, MES_User_Email_Address
FROM MES_User
WHERE MES_User_Email_Address LIKE 'excollege100%'
 

Он ничего не вернул.
Я ожидаю, что он вернется:
219730 excollegetest1006@gmail.com

Попробовал следующее:

1.)

 SELECT MES_User_ID, MES_User_Email_Address
FROM MES_User
WHERE MES_User_Email_Address LIKE 'excollegetest1%'
 

Он вернул то, что я ожидал, но я хочу сузить его еще больше, добавив два нуля, чтобы результат вернул 100-кратный ряд.

2.)

 SELECT MES_User_ID, MES_User_Email_Address
FROM MES_User
WHERE MES_User_Email_Address LIKE 'excollegetest1##%'
 

Он ничего не вернул

 quser = r'excollegetest100%'

cursor = cnxn.cursor()
cursor.execute('''
SELECT MES_User_ID, MES_User_Email_Address
FROM MES_User
WHERE MES_User_Email_Address LIKE ?
''', quser)
row = cursor.fetchmany()

for row in cursor:
    print(str(row[0])   " : "   row[1])
 

Я ничего не возвращаю.

Комментарии:

1. Первый запрос не должен соответствовать вашим ожиданиям, поскольку шаблон excollege100% не содержит «test» между «excollege100» и «100». Второй тоже не должен возвращаться excollegetest1006@gmail.com .

2. Спасибо, что заметили, что @TedKleinBergman это была опечатка. Извините за это. Это должно быть excollegetest100%

3. Можете ли вы извлечь данные из базы данных с помощью этого запроса? И в пункте 2. вы поставили # вместо 0?

4. @Sivaprasath когда я использовал «SQL Server Management Studio», каждый приведенный выше запрос работает нормально. Но при использовании pyodbc это не работает.

Ответ №1:

Используйте это

 quser = 'excollegetest100'

sql='SELECT MES_User_ID,MES_User_Email_Address FROM MES_User WHERE 
MES_User_Email_Address LIKE %s'

args=[quser '%']
cursor.execute(sql,args)
row = cursor.fetchall()
 

Комментарии:

1. Привет, Арун, вот результат вашего предложения: трассировка (последний последний вызов): File «test.py «, строка 15, в <module> cursor.execute(sql, аргументы) pyodbc. Ошибка программирования: (‘SQL содержит 0 маркеров параметров, но был указан 1 параметр’, ‘HY000’)

2. @vigilantes Попробуйте этот рецепт со sql строкой, заканчивающейся на LIKE ? вместо LIKE %s . Насколько мне известно, %s это недопустимый маркер параметра в pyodbc, поэтому механизм DB жалуется на то, что вы передаете параметр, в котором none не может быть заменен.

3. @shmee Я пробовал это quser = 'excollegetest100' sql = '''SELECT MAS_User_ID,MAS_User_Email_Address FROM MAS_User WHERE MAS_User_Email_Address LIKE ?''' args = [quser '%']

4. Можете ли вы попробовать это sql = 'SELECT "MES_User_ID","MES_User_Email_Address" FROM "MES_User" WHERE "MES_User_Email_Address" LIKE (' "'%" quser "%'" ')

5. cursor.execute(sql) row = cursor.fetchall()

Ответ №2:

 import pyodbc

cnxn = pyodbc.connect("database")
cursor = cnxn.cursor()

qry = "excollege100"

sql = ('''SELECT MES_User_ID, MES_User_Email_Address 
    FROM MES_User 
    WHERE MES_User_Email_Address LIKE ?''')

param = f'{qry}%'
row = cursor.execute(sql, param)
row = cursor.fetchmany()

for row in cursor:
    try:
        print(str(row[0])   " : "   row[1])
    except:
        print("TypeError")
        print (str(row))