我尝试使用预定义的管理员创建系统,然后新的管理员可以在输入数据库后更新信息。
在我第一次使用系统时,它会添加默认管理员,但一旦我更新了管理员并重新打开系统。它会再次添加默认管理员。
以下是默认管理员插入的代码。
with sqlite3.connect('esr.db') as db:
c = db.cursor()
c.execute('CREATE TABLE IF NOT EXISTS admin (adminuser TEXT NOT NULL ,password TEXT NOT NULL);')
c.execute('SELECT COUNT(*) FROM admin')
count = c.fetchall()
if len(count) == 0:
insert = 'INSERT INTO admin(adminuser,password) VALUES(?,?)'
c.execute(insert,['admin', 'password'])
db.commit()
db.close()
答案 0 :(得分:0)
对我来说,为什么再次插入默认值并不明显。以下是避免这种情况的两种解决方案。
首先是在插入中进行检查:
insert into admin (adminuser, password)
select adminuser, password
from (select ? as adminuser, ? as password) x
where not exists (select 1 from admin);
第二种是在定义表时进行检查:
CREATE TABLE IF NOT EXISTS admin (
adminuser TEXT PRIMARY KEY,
password TEXT NOT NULL
);
这样可以防止重复插入。
在任何一种情况下,您都不应将密码存储为自由文本。它应该始终加密。
答案 1 :(得分:0)
我找到了答案
这就是我解决它的方式。
find_user =(' SELECT * FROM admin WHERE adminuser =?')
c.execute(find_user,['管理'])
result01 = c.fetchall()
如果len(result01)== 0:
insert =' INSERT INTO admin(adminuser,password)VALUES(?,?)'
c.execute(插入,[' admin','传递'])