Python 验证电子邮件和散列密码时,如果详细信息确实在数据库中,则始终返回“无”

Python 验证电子邮件和散列密码时,如果详细信息确实在数据库中,则始终返回“无”,python,postgresql,python-2.7,hash,hashlib,Python,Postgresql,Python 2.7,Hash,Hashlib,我有一个简单的程序来检查Postgres数据库中是否有电子邮件和散列密码(它本来是一个cgi应用程序,但因为它失败了,我先将它作为脚本进行测试): 此程序在打印时始终不返回任何值。不过,电子邮件和散列密码肯定在数据库中。我把它们和这个放在一起: email = "person@gmail.com" allpass = "mypassword" password = hashlib.sha224(allpass.encode()).hexdigest() cursor.execute('INSER

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

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

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语句上返回一些东西呢?散列不是以同样的方式存储的吗?任何帮助都将不胜感激

我找出了问题所在。实际上,cursor.execute()并不返回任何内容。为此,必须使用fetchone()

cursor.execute('SELECT * FROM logins WHERE email=%s AND passhash=%s;', (email, password))
result = cursor.fetchone()
print result

这将打印正确结果的元组

键入
光标。是否执行
调用?应该是:
%(电子邮件、密码)
?我认为这不重要,因为第二段代码没有它也可以工作,但尝试它会返回
编程错误:列”person@gmail.com“不存在第1行:从电子邮件="person@gmail.com....
好的,最后一条评论只是我如何传递它的一个问题。将查询更改为使用不安全的转义字符等仍然不会从数据库中提取任何内容,但是将相同的查询直接输入到数据库中会返回正确的行。它只是在python程序中没有。
cursor.execute('SELECT * FROM logins WHERE email=%s AND passhash=%s;', (email, password))
result = cursor.fetchone()
print result