Получить конкретное значение из БД с помощью pyodbc - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь получить конкретное значение из таблицы SQL с pyodbc на Python. Таблица dbo.passes имеет 2 столбца: ('user_name','password') со значениями ('test','5555'). У меня есть следующий код:

cursor.execute("SELECT password FROM [dbo].[passes] where user_name ='test'")
for row in cursor.fetchall():
    print (row)

passw = input("enter pass ")
if passw == row: 
    print ("nice")
else:
    print ("wrong")

Если мой ввод 5555, он не соответствует "строке", потому что он выглядит как ('5555 ')

Как в этом случае извлечь из базы данных только значение 5555, но не в виде списка?

Ответы [ 3 ]

0 голосов
/ 10 апреля 2019

Предложение строки [0] сработало, только немного отличается:

cursor.execute("SELECT RTRIM (password) FROM [dbo].[passes] where user_name = 'test'")
for row in cursor.fetchall():
    print (row)

sqlpass = row[0]
print (sqlpass)

passw = input("enter pass ")
if passw == sqlpass: 
    print ("nice")
else:
    print ("wrong")

RTRIM необходим, так как поле является varchar (20), а возвращаемая строка является сохраненной строкой плюс любое количество пробеловпробелы до 20 символов.

0 голосов
/ 10 апреля 2019

Как в этом случае извлечь из базы данных только значение 5555, но не в виде списка?

pyodbc поддерживает метод .fetchval () , который возвращает единственное скалярное значение:

count = cursor.execute('select count(*) from users').fetchval()
0 голосов
/ 10 апреля 2019

Вы не можете. SQL по замыслу возвращает кортежи. Получите доступ к вашему списковому значению в python, что-то вроде этого:

cursor.execute("SELECT password FROM [dbo].[passes] where user_name ='test'")
for row in cursor.fetchall():
    print (row)

passw = input("enter pass ")
if passw == row['password']: # Could also be row[0], idk you have to try
    print ("nice")
else:
    print ("wrong")
...