Flask DataBase SqLite Запись не добавляется в базу

Рейтинг: 0Ответов: 0Опубликовано: 15.03.2023

Уходит в блок 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="Отправить">

Ответы

Ответов пока нет.