我正在使用 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"
请帮忙!
我尝试更改列名称,但错误仍然存在
嘿,你有没有注意到你有错字?
您已将该列定义为
ablum_name
而不是 album_name
。
如果将型号名称更改为:
album_name=db.Column(db.String(50),nullable=False,unique=True)
应该可以。因此,在这种情况下,错误消息会很好地提示您去哪里查找。