使用pyodbc从数据库检索特定值

时间:2019-04-10 10:41:12

标签: python sql database pyodbc

我正在尝试使用Python中的pyodbc从SQL表中获取特定值。 表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 :(得分:0)

不能。根据设计,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")

答案 1 :(得分:0)

第[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个字符)。

答案 2 :(得分:0)

  

在这种情况下,如何从数据库中仅检索值5555,而不以列表格式检索?

pyodbc支持一种返回单个标量值的.fetchval()方法:

count = cursor.execute('select count(*) from users').fetchval()