SQLite3中检查用户记录是否存在的问题求助
SQLite3用户存在检查失败的问题修复
你的代码有两个核心问题导致检查已存在用户失效:
1. SELECT语句写法错误+误用rowcount
你写的SELECT username AND password, COUNT(*) FROM users...里,username AND password是布尔逻辑运算,不是要查询的列,完全没必要写。而且SQLite的cursor.rowcount对于SELECT语句来说,返回的是上一次修改操作的行数,不是你这次查询得到的COUNT值,所以用它判断用户是否存在根本不靠谱。
2. 多余的GROUP BY
WHERE条件已经限定了username=?,GROUP BY username完全是画蛇添足,反而可能导致结果不符合预期。
修正后的代码:
# 直接查询符合条件的用户数量 self.c.execute('SELECT COUNT(*) FROM users WHERE username=? AND password=?', (self.reg_username_entry.get(), self.reg_password_entry.get())) # 从查询结果里取COUNT值,fetchone()返回单条记录的元组,索引0就是数量 count = self.c.fetchone()[0] if count >= 1: self.my_label = customtkinter.CTkLabel(self.reg_window, text='User already exists', font=('Arial', 10)).pack(pady=10) else: self.c.execute('INSERT INTO users (username, password) VALUES(?, ?)', (self.reg_username_entry.get(), self.reg_password_entry.get())) self.conn.commit() self.Login()
额外优化建议:
- 实际场景里,应该先检查用户名是否存在(不需要密码),因为用户名是唯一标识,先提示用户名已存在更合理。
- 密码不要明文存储,记得用哈希算法(比如bcrypt)加密后再存入数据库。
内容的提问来源于stack exchange,提问作者Kael Scanes
相关产品推荐
相关产品推荐

