sqlite数据库继续插入默认管理员

时间:2018-04-01 08:34:21

标签: python database sqlite

我尝试使用预定义的管理员创建系统,然后新的管理员可以在输入数据库后更新信息。

在我第一次使用系统时,它会添加默认管理员,但一旦我更新了管理员并重新打开系统。它会再次添加默认管理员。

以下是默认管理员插入的代码。

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()

2 个答案:

答案 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','传递'])