Flask DataBase SqLite Запись не добавляется в базу
Уходит в блок except при добавлении в бд.
def password_generator():
chars = '+-/*!&$#?=@<>abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
password = ''
for i in range(10):
password += choice(chars)
return password
class Students(db.Model):
'''Основная таблица с информацией и контактами студента'''
id = db.Column(db.Integer, primary_key=True)
fio = db.Column(db.String(100), nullable=False)
position = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(100), nullable=False)
phone = db.Column(db.String(20), nullable=False)
birthday = db.Column(db.Date, nullable=False)
snils = db.Column(db.String(20), nullable=False)
login = db.Column(db.String(100))
password = db.Column(db.String(100))
def __repr__(self):
return '<Students %r>' % self.id
@app.route("/create-form", methods=['POST', 'GET'])
def create_form():
students_id = []
if request.method == 'POST':
student_fio = request.form.getlist('student_fio[]')
student_position = request.form.getlist('student_position[]')
student_email = request.form.getlist('student_email[]')
student_phone = request.form.getlist('student_phone[]')
student_birthday = request.form.getlist('student_birthday[]')
student_snils = request.form.getlist('student_snils[]')
for i in range(len(student_fio)):
# логин из фио превращается в Ivanov_II_9999 числа нужны для уникальности
latin_login = re.match(r'^([A-z]+)\s([A-Z])[a-z]+\s([A-Z])[a-z]+', translit(student_fio[i], reversed=True))
login = str(latin_login.group(1)) + '_' + str(latin_login.group(2)) + \
str(latin_login.group(3)) + '_' + str(randint(1, 10000))
password = password_generator()
# На этих принтах все данные принимаются и обрабатываются верно
print(student_fio[i])
print(student_position[i])
print(student_email[i])
print(student_phone[i])
print(student_birthday[i])
print(student_snils[i])
print(login)
print(password)
student = Students(fio=student_fio[i], position=student_position[i],
email=student_email[i], phone=student_phone[i],
birthday=student_birthday[i], snils=student_snils[i],
login=login, password=password)
try:
db.session.add(student)
db.session.flush()
new_id = student.id
db.session.commit()
students_id.append(new_id)
except:
print(f'[ERROR] Проблема с добавлением студента {student_fio[i]}')
return render_template('create-form.html', title='Index')
Пример html блока кода с вводом данных
<form method="post">
<h5>Student 1</h5>
<input type="text" name="student_fio[]" placeholder="fio"><br>
<input type="text" name="student_position[]" placeholder="position"><br>
<input type="text" name="student_email[]" placeholder="email"><br>
<input type="text" name="student_phone[]" placeholder="phone"><br>
<input type="text" name="student_snils[]" placeholder="snils"><br>
<input type="date" name="student_birthday[]" placeholder="birthday"><br>
<input type="submit" value="Отправить">
Источник: Stack Overflow на русском