InvalidRequestError:实体命名空间“album”没有属性“album_name”

问题描述 投票:0回答:1

我正在使用 Flask 和 Flask-sqlalchemy 制作音乐流应用程序。我创建了一个表单来上传歌曲以及专辑名称。我首先检查专辑是否是新的,然后将专辑添加到数据库中:

@app.route('/upload-a-song',methods=['GET','POST'])
def upload_song():
    form=SongForm()
    creator=Creator.query.filter_by(username=session['username'])
    if form.validate_on_submit():
        album=Album.query.filter_by(album_name=form.album_name.data).first()
        if not album:
            new_album=Album(album_name=form.album_name.data,creator=session['username'])
            db.session.add(new_album)
            new_song=Songs(title=form.song_title.data,lyrics=form.lyrics.data,
                        genre=form.genre.data,album_id=new_album.album_id)
            db.session.add(new_song)
            db.session.commit()
            flash('Song added successfully')
            return redirect(url_for('user_home',user_name=new_album.creator))
        else:
            new_song=Songs(title=form.song_title.data,lyrics=form.lyrics.data,
                        genre=form.genre.data,album_id=album.album_id)
            db.session.add(new_song)
            db.session.commit()
            flash('Song added successfully')
            return redirect(url_for('user_home',user_name=album.creator))
    if form.errors!={}:
        for err_msg in form.errors.values():
            flash(f'There was an error in uploading the song: {err_msg}',category='error')
    if request.method=='GET':
        return render_template('upload_song.html',form=form,creator=creator)

这是我的模型:

class Album(db.Model):
    __tablename__='album'
    __searchable__=['ablum_name']
    album_id=db.Column(db.Integer(),nullable=False,primary_key=True,unique=True)
    ablum_name=db.Column(db.String(50),nullable=False,unique=True)
    release_date=db.Column(db.Date(),nullable=False,default=date.today())
    creator_id=db.Column(db.String(),db.ForeignKey('creator.creator_id'))
    song=db.relationship('Songs',back_populates='album')


#for all the songs
class Songs(db.Model):
    __tablename__='songs'
    __searchable__=['title']
    song_id=db.Column(db.Integer(),nullable=False,primary_key=True,unique=True)
    title=db.Column(db.String(50),nullable=False,unique=True)
    lyrics=db.Column(db.String(50000),nullable=False)
    genre=db.Column(db.String(30))
    album_id=db.Column(db.String(),db.ForeignKey('album.album_id'))
    album=db.relationship('Album',back_populates='song')

但是当我从表单上传歌曲时,我收到此错误:

sqlalchemy.exc.InvalidRequestError: Entity namespace for "album" has no property "album_name"

请帮忙!

我尝试更改列名称,但错误仍然存在

flask flask-sqlalchemy web-development-server
1个回答
0
投票

嘿,你有没有注意到你有错字?

您已将该列定义为

ablum_name
而不是
album_name

如果将型号名称更改为:

album_name=db.Column(db.String(50),nullable=False,unique=True)

应该可以。因此,在这种情况下,错误消息会很好地提示您去哪里查找。

© www.soinside.com 2019 - 2024. All rights reserved.