我正在尝试使用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,而不以列表格式检索?
答案 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()