为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉莫斯之舞 2022-01-05 19:56:04
我正在尝试使用 Python 中的 pyodbc 从 SQL 表中获取特定值。表 dbo.passes 有 2 列:('user_name','password')包含 values ('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 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

你不能。按照设计,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")


查看完整回答
反对 回复 2022-01-05
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

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


查看完整回答
反对 回复 2022-01-05
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

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

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

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


查看完整回答
反对 回复 2022-01-05
  • 3 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信