首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当详细信息肯定在DB中时,验证电子邮件和散列密码总是不返回。

当详细信息肯定在DB中时,验证电子邮件和散列密码总是不返回。
EN

Stack Overflow用户
提问于 2017-04-18 15:29:22
回答 1查看 57关注 0票数 2

我有一个简单的程序来检查一个电子邮件和散列密码是否在Postgres数据库中(它本来是一个cgi应用程序,但由于它失败了,我首先将它作为脚本进行测试):

代码语言:javascript
运行
复制
import cgi
import cgitb
import hashlib
import psycopg2
from dbconfig import *
cgitb.enable()
print "Content-Type: text/plain\n\n";

def checkPass():
    email = "person@gmail.com"
    password = "mypassword"
    password = hashlib.sha224(password.encode()).hexdigest()
    result = cursor.execute('SELECT * FROM logins WHERE email=%s AND passhash=%s', (email, password))
    print result


if __name__ == "__main__":
    conn_string = "host=%s dbname=%s user=%s password=%s" % (host, database, dbuser, dbpassword)
    conn = psycopg2.connect(conn_string)
    cursor = conn.cursor()
    checkPass()

此程序在打印时始终不返回任何内容。不过,电子邮件和散列密码肯定在数据库中。我把它们和这个放在一起:

代码语言:javascript
运行
复制
email = "person@gmail.com"
allpass = "mypassword"
password = hashlib.sha224(allpass.encode()).hexdigest()
cursor.execute('INSERT INTO logins (email, passhash) VALUES (%s, %s);', (email, password))
conn.commit()

检查数据库显示有电子邮件和散列密码。那么,为什么第一个程序不返回SELECT语句呢?散列不是以相同的方式存储的吗?任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-18 17:33:34

我想出了什么问题。碰巧,cursor.execute()实际上没有返回任何内容。为此,您必须使用fetchone()。

代码语言:javascript
运行
复制
cursor.execute('SELECT * FROM logins WHERE email=%s AND passhash=%s;', (email, password))
result = cursor.fetchone()
print result

这将打印正确结果的元组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43476331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档