我正在使用SQLite3在Python中创建一个登录系统。我的代码选择满足存储在数据库中的用户名和密码的所有记录,如下所示。
c.execute('SELECT * from foo WHERE username="%s" AND password="%s"' (username, password).
if c.fetchone is not None:
do stuff
我不知道如何将该记录中的数据分配到函数内的局部变量中,因此我可以检查它的值。在这种情况下,我想从我刚刚搜索过的记录中检索用户组值,然后检查它是1还是2,以确定下一个要调用的函数。
答案 0 :(得分:0)
要调用fetchone
方法,必须使用括号:
if c.fetchone() is not None:
如果您没有将fetchone()
的返回值分配给变量,则会丢失。
最好直接在光标上进行迭代:
for row in c:
print('value in first column: ', row[0])
break
else:
print('not found')
您应该只选择一列,这样可以更轻松地访问其值:
c.execute('SELECT usergroup FROM ...')
for (usergroup,) in c:
print('group: ', usergroup)
如果有人输入密码" OR "1"="1
,那么无论如何他都会进入。要防止此类SQL injections,请始终使用参数:
c.execute('SELECT usergroup FROM foo WHERE username=? AND password=?',
(username, password))
for (usergroup,) in c:
print('group: ', usergroup)
break
else:
print('not found')