我希望我的代码使用if语句来检查用户所在的用户组,然后为每个用户调用不同的函数。我目前的代码如下:
acc
我应该怎么做才能使比较工作,因为我的记录确实包含1或2的值,但验证不起作用。
答案 0 :(得分:0)
不要多次重复相同的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]()
如果查询没有返回用户组,则for循环不会
执行它的身体。如果usergroup
不是1或2,那么
funcmap[usergroup]
会提出KeyError
。如你所说,这个
不应该发生,但如果它发生,KeyError
会让你
知道。您可能希望使用try..except KeyError
语句
在funcmap[usergroup]()
附近以某种其他方式处理错误(记录,退出前更好的特定错误消息等)
请注意,根据您实例化sqlite3
连接的方式以及如何设置数据库表,usergroup
可以是整数或字符串。如果它返回一个字符串,您可能希望提出另一个关于如何将usergroup
作为整数检索的问题。
或者,您可以将funcmap
更改为期望字符串作为dict键:
funcmap = {'1': self.admin_login_successful, '2': self.user_login_successful}