首页 > 解决方案 > 数据库模型没有属性

问题描述

这是一个带有 Flask_sqlalchemy 的多对多数据库。我相信我已经精确地遵循了这些示例,但是AttributeError: 'Song' object has no attribute 'category'在运行它时我得到了,但我无法弄清楚出了什么问题。

我怎样才能解决这个问题?

association_table = db.Table('association',
                             db.Column('songs_id', db.Integer,
                                       db.ForeignKey('songs.id')),
                             db.Column('genres_id', db.Integer,
                                       db.ForeignKey('genres.id'))
                             )

class Song(db.Model):
    __tablename__ = 'songs'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(80), index=True, unique=True, nullable=False)
    artist = db.Column(db.String(30), primary_key=False,
                       unique=False, nullable=False)
    added = db.Column(db.Date, nullable=False)
    genres = db.relationship("Genre", secondary=association_table, backref=db.backref('songs'))

    def __repr__(self):
        return '{}'.format(self.title)

class Genre(db.Model):
    __tablename__ = 'genres'
    id = db.Column(db.Integer, primary_key=True)
    category = db.Column(db.String(80), index=True,
                         unique=True, nullable=False)

我的插入看起来像这样:

    song = Song(title="test title", artist="test name")
    genre = Genre(category="test category")
    song.category.append(genre)
    db.session.add(song)
    db.session.commit()

编辑:我也有查询问题。

test = Genre.query.filter(Genre.songs.any(title="that song")).all()
print(test)

打印[<Genre 3>, <Genre 4>, <Genre 5>]而不是流派。为什么是这样?

标签: pythonflaskflask-sqlalchemy

解决方案


您的Song课程没有类别名称的属性,但您正试图将您的流派附加到它。你的意思是这样做吗?

song = Song(title="test title", artist="test name")
genre = Genre(category="test category")
song.genres.append(genre)   # You wrote category, but your class only has a "genres" relationship
db.session.add(song)
db.session.commit()

推荐阅读