SQLite3 记录验证
SQLite3 record validation
我希望我的代码使用 if 语句来检查用户属于哪个用户组,然后为每个用户调用不同的函数。我现在的代码如下:
c.execute('SELECT * from users WHERE username=? AND password =?',
(username_input, password_input))
if c.fetchone() is not None:
c.execute('SELECT usergroup from users WHERE username=? AND password=?',
(username_input, password_input))
user_group = c.fetchone()
for (usergroup,) in c:
if user_group == 1:
App.admin_login_successful(self)
elif user_group == 2:
App.user_login_successful(self)
else:
App.user_login_successful(self)
# This shouldn't happen, as all records should theoretically contain a value for usergroup.
我应该怎么做才能进行比较,因为我的记录确实包含 1 或 2 的值,但验证不起作用。
不要多次重复相同的 sql 查询。
funcmap = {1: self.admin_login_successful, 2: self.user_login_successful}
c.execute('SELECT usergroup from users WHERE username=? AND password=?',
(username_input, password_input))
for (usergroup,) in c:
funcmap[usergroup]()
如果查询returns没有usergroups,那么for-loop就不会
执行它的body。如果 usergroup
不是 1 或 2,则
funcmap[usergroup]
将引发 KeyError
。正如你所说,这
不应该发生,但如果发生了 KeyError
会让你
知道。您可能希望使用 try..except KeyError
语句
funcmap[usergroup]()
以其他方式处理错误(记录、退出前更好的特定错误消息等)
请注意,根据您如何实例化 sqlite3
连接以及您如何设置数据库 table,usergroup
可能是整数或字符串。如果它返回一个字符串,您可能想问另一个关于如何将 usergroup
检索为整数的问题。
或者,您可以更改 funcmap
以期望字符串作为字典键:
funcmap = {'1': self.admin_login_successful, '2': self.user_login_successful}
我希望我的代码使用 if 语句来检查用户属于哪个用户组,然后为每个用户调用不同的函数。我现在的代码如下:
c.execute('SELECT * from users WHERE username=? AND password =?',
(username_input, password_input))
if c.fetchone() is not None:
c.execute('SELECT usergroup from users WHERE username=? AND password=?',
(username_input, password_input))
user_group = c.fetchone()
for (usergroup,) in c:
if user_group == 1:
App.admin_login_successful(self)
elif user_group == 2:
App.user_login_successful(self)
else:
App.user_login_successful(self)
# This shouldn't happen, as all records should theoretically contain a value for usergroup.
我应该怎么做才能进行比较,因为我的记录确实包含 1 或 2 的值,但验证不起作用。
不要多次重复相同的 sql 查询。
funcmap = {1: self.admin_login_successful, 2: self.user_login_successful}
c.execute('SELECT usergroup from users WHERE username=? AND password=?',
(username_input, password_input))
for (usergroup,) in c:
funcmap[usergroup]()
如果查询returns没有usergroups,那么for-loop就不会
执行它的body。如果 usergroup
不是 1 或 2,则
funcmap[usergroup]
将引发 KeyError
。正如你所说,这
不应该发生,但如果发生了 KeyError
会让你
知道。您可能希望使用 try..except KeyError
语句
funcmap[usergroup]()
以其他方式处理错误(记录、退出前更好的特定错误消息等)
请注意,根据您如何实例化 sqlite3
连接以及您如何设置数据库 table,usergroup
可能是整数或字符串。如果它返回一个字符串,您可能想问另一个关于如何将 usergroup
检索为整数的问题。
或者,您可以更改 funcmap
以期望字符串作为字典键:
funcmap = {'1': self.admin_login_successful, '2': self.user_login_successful}