我有一个包含3列(id,username,password)的sqlite表。表格中有一行。我正在尝试运行sqlite查询以选择用户名和密码与用户输入的内容匹配的ID。我的login.py代码如下:
import sqlite3 as lite
def login(userinput, userpass):
con = lite.connect('console.db')
with con:
cur = con.cursor()
cur.execute("SELECT id FROM users WHERE username == :userinput & password == :userpass", {"userinput": userinput, "userpass": userpass})
con.commit()
row = cur.fetchone()
print row[0]
我的main.py代码如下:
import login
from getpass import getpass
import hashlib
username = raw_input("username >>")
password1 = getpass("password >>")
password1 = hashlib.sha224(password1).hexdigest()
login.login(username, password1)
我收到如下错误消息:
Traceback (most recent call last):
File "/home/wip/PycharmProjects/console/main.py", line 9, in <module>
login.login(username, password1)
File "/home/wip/PycharmProjects/console/login.py", line 12, in login
print row[0]
TypeError: 'NoneType' object has no attribute '__getitem__'
存储在表格中的密码使用sha224加密存储,就像用户在提示时输入密码一样。任何有关这方面的帮助将不胜感激!
答案 0 :(得分:0)
您的查询未返回任何行,因此fetchone()
将返回None。
尝试在查询中使用and
代替&
:
cur.execute("SELECT id FROM users WHERE username == :userinput and password == :userpass", {"userinput": userinput, "userpass": userpass})
我认为==
通常不是有效的SQL,因此您应该使用=
代替。
另一件事是,您无需为选择查询调用commit()
。