После того, как я добавил таблицу ассоциации, ничего не фиксируется в базе данных - PullRequest
0 голосов
/ 28 февраля 2020

Я создаю приложение для оценки пива на мероприятии. Пиво, которое можно оценить, должно быть добавлено в таблицу, а также, если событие добавлено в другую таблицу, и пиво и событие должны быть связаны. Поскольку на мероприятии можно попробовать не только одно пиво, а пиво можно попробовать на нескольких мероприятиях, я хочу создать отношения am: n-Relations. Я делаю это с python3, я использую flask и flasksqlalchemy. Я использую базу данных sqlite.

Модель, которую я построил, выглядит так:

#association table
event_beer = db.Table('event_beer',
                      db.Column('event_id', db.Integer, db.ForeignKey('event.id'), primary_key=True),
                      db.Column('beer_id', db.Integer, db.ForeignKey('beer.id'), primary_key=True))

class Event(db.Model):
    __tablename__ = 'event'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=False)
    def __str__(self):
        return f'{name}'

class Beer(db.Model):
    __tablename__ = 'beer'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=False)
    event = db.relationship('Event', secondary=event_beer)
    def __str__(self):
        return f'{self.name}, {self.event}'

Я опустил несколько столбцов, в которых нет внешних ключей или около того для ради простоты. Код, который выполняется, когда я хочу сохранить записанные данные:

event = Event(name = 'event_name')
beer1 = Beer(name = 'beerone')
beer2 = Beer(name = 'beertwo')
beer1.event.append(event)
beer2.event.append(event)
db.session.commit()

Сохраняемые значения не являются строками, но для простоты я заменил их. Однако значения есть, и в базе данных нет пустых строк.

Я не знаю, неправильно ли я настроил модель или это проблема при фиксации. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 28 февраля 2020

Мне очень жаль, я только что нашел проблему. Очевидно, я забыл добавить элементы в сессию . Все, что пропустили, были db.session.add(event). Я пытался выяснить это, по крайней мере, 6 часов, но я нашел это только после того, как опубликовал проблему в stackoverflow.

...