внутренняя ошибка сервера Flask - Python

Это мой код на Python — Flask. Здесь я ввожу данные для Theater (таблица Theatre), затем извлекаю соответствующий идентификатор, а затем добавляю экран к соответствующему theatre_id в таблице Screen.

Проблема в том, что Theater добавляется в базу данных, и я могу получить идентификатор. Код для экрана, похоже, не работает (цикл for работает, если я закомментирую оператор добавления и фиксации session.screen). И даже откат не происходит, если не происходит фиксация экрана.

session_theatre = Session_theatre()
session_screen = Session_screen()
id = 1
if request.method == "POST":
    if form.validate_on_submit():
        name = str(form.name.data)
        city = str(form.location.data)
        address = str(form.address.data)
        no_of_screen = int(form.total_no_screen.data)
        if (name !="" and name!=" " and city != "" and city != " " and address != ""and address != " " and no_of_screen != None):
            t = Theatre(name,city,address,1)
            try:
                session_theatre.add(t)
                session_theatre.commit()
                query = session_theatre.query(Theatre).filter_by(name=name,city =city).all()
                for i in query :
                    id = i
                for i in range (0,no_of_screen):
                    flash(id)
                    screen = Screen(str(i+1),1,20,1,20,id)
                    session_screen.add(screen)
                    session_screen.commit()
                flash("Successfully added !!")
            except :
                session_screen.rollback()
                session_theatre.rollback()
                flash("Oops something went wrong !!")
            finally:
                session_screen.close()
                session_theatre.close()
        else :
            flash("Please fill the input")
return render_template('admin/add_theatre.html',form = form)

Модель экрана

class Screen(db.Model):
    __tablename__ = "screens"
    id = db.Column(db.Integer,primary_key=True)
    screen_num = db.Column(db.String(1))
    seat_row_start = db.Column(db.Integer)
    seat_row_end = db.Column(db.Integer)
    seat_col_start = db.Column(db.Integer)
    seat_col_end = db.Column(db.Integer)
    theatre_id =  db.Column(db.Integer, db.ForeignKey('theatres.id'))

    def __init__(self, screen_num, 
    seat_row_start,seat_row_end,seat_col_start,seat_col_end,theatre_id):
        self.screen_num = screen_num
        self.seat_row_start = seat_row_start
        self.seat_row_end = seat_row_end
        self.seat_col_start = seat_col_start
        self.seat_col_end = seat_col_end
        self.theatre_id = theatre_id

person souravlahoti    schedule 07.07.2015    source источник
comment
Код имеет неправильный отступ.   -  person doru    schedule 07.07.2015
comment
@doru отредактировал код .. проверьте код   -  person souravlahoti    schedule 07.07.2015
comment
Второй цикл for не имеет отступа, а должен.   -  person doru    schedule 07.07.2015
comment
Вы должны добавить код модели Screen.   -  person doru    schedule 07.07.2015


Ответы (1)


Чтобы получить список из запроса для session_theatre, вы должны добавить all() в конце:

query = session_theatre.query(Theatre).filter_by(name=name,city =city).all()

Запрос возвращает список объектов Theatre, и вы можете получить доступ к атрибуту id каждого объекта Theatre, перебирая список и получая доступ к атрибуту по его имени:

for obj in query :
    for i in range (0,no_of_screen):
        flash(obj.id)
        screen = Screen(i+1,1,20,1,20,obj.id)
        session_screen.add(screen)
        session_screen.commit()
person doru    schedule 07.07.2015
comment
Я могу получить идентификатор, но экран не добавляется в БД - person souravlahoti; 07.07.2015
comment
Что такое id, int или list? - person doru; 07.07.2015
comment
нет, это исключение @Doru. позвольте мне проверить ошибку - person souravlahoti; 07.07.2015
comment
Я снова обновил ответ. Я думаю, что запрос возвращает список объектов «Театр», и вы можете получить доступ к атрибуту id каждого объекта Theatre по его имени. - person doru; 07.07.2015