SQLite3记录操作

时间:2017-10-08 14:12:22

标签: python database sqlite data-manipulation

我正在使用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,以确定下一个要调用的函数。

1 个答案:

答案 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')