#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))