Для первой ошибки, когда SELECT COUNT ничего не возвращает, в Sqlite3 используется select *
вместо select count(*)
. Следовательно, ваш код должен быть:
rows = conn.execute('SELECT * FROM auth WHERE emailid = ?',(emailid,)).fetchall()
Для второй ошибки вставки у вас уже может быть эквивалентное значение emailid, сохраненное в auth
. Это единственная причина, по которой у вас может быть нарушение ограничения уникального идентификатора электронной почты.
Другая (потенциальная) ошибка заключается в том, что вы устанавливаете otp на emailid и пароль на emailid, при этом порядок должен быть отменен:
conn.execute('update auth SET otp=(?) where emailid=(?)',[emailid,password])
Вместо этого сделайте следующее:
conn.execute('UPDATE auth SET otp = ? WHERE emailid = ?',(password, emailid))
Окончательный код:
def sqliteconfig():
try:
conn = sqlite3.connect('auth.db',check_same_thread=False)
cur = conn.cursor()
conn.execute('CREATE TABLE IF NOT EXISTS auth (AID INTEGER PRIMARY KEY AUTOINCREMENT, emailid TEXT UNIQUE, otp TEXT, created_at TEXT DEFAULT CURRENT_TIMESTAMP)')
cur.close()
except Exception as e:
print(e)
return 'DatabaseDown'
# return 'DatabaseDown'
return conn
@bp.route('/')
def index_redirect():
return redirect(url_for('devcon.login'))
@bp.route('/login',methods=['GET','POST'])
def login():
conn = sqliteconfig()
cur = conn.cursor()
if request.method == 'POST':
emailid = request.form['emailid']
if emailid != "":
s = "abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
passlen = 8
password = "".join(random.sample(s,passlen ))
rows = conn.execute('SELECT * FROM auth WHERE emailid = ?',(emailid,)).fetchall()
if len(rows) == 0:
conn.execute('INSERT into auth (email, otp) VALUES (?, ?)',(emailid, password))
conn.commit()
elif len(rows)==1:
conn.execute('UPDATE auth SET otp = ? WHERE emailid = ?',(emailid, password))
conn.commit()
return str(rows)
return render_template("login/login.html")