SQLite3记录验证

时间:2017-10-08 15:43:59

标签: python validation sqlite data-manipulation

我希望我的代码使用if语句来检查用户所在的用户组,然后为每个用户调用不同的函数。我目前的代码如下:

acc

我应该怎么做才能使比较工作,因为我的记录确实包含1或2的值,但验证不起作用。

1 个答案:

答案 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}