SQLite3记录操作
问题描述:
我使用SQLite3在Python中创建登录系统。我的代码将按照以下方式选择所有存储在数据库中的用户名和密码的记录。SQLite3记录操作
c.execute('SELECT * from foo WHERE username="%s" AND password="%s"' (username, password).
if c.fetchone is not None:
do stuff
我不知道那么如何从记录中的数据分配到一个函数中的局部变量,这样我就可以检查它的价值。在这种情况下,我想从刚刚搜索的记录中检索usergroup值,然后检查它是1还是2,以确定下一个要调用的函数。
答
要调用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')
'fetchone'是一种方法;你调用它,并返回数据。 –
那我该如何使用'fetchone'? –
就像其他方法一样。 'data = c.fetchone()'。 –