【问题标题】:After I added the association table nothing is committed into the database添加关联表后,没有任何内容提交到数据库中
【发布时间】:2020-06-12 11:22:18
【问题描述】:

我正在构建一个应用程序,用于对活动中的啤酒进行评级。可以评价的啤酒应该添加到一张桌子上,也应该将事件添加到另一张桌子上,并且啤酒和事件应该连接起来。由于在一个活动中要品尝的不仅仅是一种啤酒,而且可以在多个活动中品尝一种啤酒,我想建立一个 m:n 关系。我正在使用 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()

要保存的值不是字符串,但为了简单起见,我替换了它们。但是值在那里,并且在数据库中没有任何空行。

我不知道是我设置的模型错误,还是提交时出现问题。任何帮助将不胜感激。

【问题讨论】:

    标签: python-3.x sqlite flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    非常抱歉,我刚刚发现了问题。显然我忘了将项目添加到会话中。所有错过的是db.session.add(event)。我现在试图解决这个问题至少 6 个小时,但在我将问题发布到 stackoverflow 后我才发现它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多