Python flask. Как проверить наличие email в базе данных?
При регистрации пользователя нужно проверить email на уникальность,
что бы не регистрировать пользователей с одинаковыми email.
Подключение к базе через MySql и SQLAlchemy.
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://root@localhost/test_db'
Добавление записей в таблицу при регистрации происходит через класс Users:
db = SQLAlchemy(app)
class Users(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=True)
email = db.Column(db.String(100), unique=True)
psw = db.Column(db.String(500), nullable=True)
Тут сама регистрация:
@app.route('/register', methods=['POST', 'GET'])
def user_register():
if request.method == 'POST':
if len(request.form['name']) > 3 and len(request.form['email']) > 3:
try:
hash = generate_password_hash(request.form['psw'])
u = Users(name=request.form['name'],email=request.form['email'], psw=hash)
db.session.add(u)
db.session.flush()
flash('Account was created', category='success')
return redirect(url_for('login'))
except:
db.session.rollback()
flash('DB ERROR! Note did not add', category='error')
else:
flash('Wrong fields', category='error')
return render_template('register.html')
В данном виде, если при регистрации указать email, который уже есть в базе, то происходит исключение, так как при создании БД полю email задается значение unicue.
Но это исключение происходит если не удалось создать запись в БД.
При этом, причины по которым не получилось создать запись могут быть разными.
Как проверить, существует ли уже в БД пользователь с email, который указывается при регистрации с целью дальнейшей обработки этого условия?
Ответы (1 шт):
email = request.form['email']
# если поиск по email в таблице ничего не возвращает
if not Users.query.filter(Users.email == email):
# добавление пользователя
# ...