Python SQLALchemy查询未返回列';s值(sqlalchemy.orm.exc.unappedinstanceerror:Class';builtins.str';未映射)
我试图将SQLAlchemy的查询结果附加到列表中 我的应用程序包含以下模型(“游戏)”和游戏查询(用作FlaskForm的QuerySelectField查询工厂)。 编辑:还添加了FlaskForm,因为问题似乎与表单本身有关,而不是查询工厂Python SQLALchemy查询未返回列';s值(sqlalchemy.orm.exc.unappedinstanceerror:Class';builtins.str';未映射),python,flask,sqlalchemy,flask-sqlalchemy,flask-wtforms,Python,Flask,Sqlalchemy,Flask Sqlalchemy,Flask Wtforms,我试图将SQLAlchemy的查询结果附加到列表中 我的应用程序包含以下模型(“游戏)”和游戏查询(用作FlaskForm的QuerySelectField查询工厂)。 编辑:还添加了FlaskForm,因为问题似乎与表单本身有关,而不是查询工厂 class Game(db.Model): game_id = db.Column(db.Integer, primary_key=True, nullable=False) title = db.Column(db.String, nul
class Game(db.Model):
game_id = db.Column(db.Integer, primary_key=True, nullable=False)
title = db.Column(db.String, nullable=False, unique=True)
records = db.relationship('Record', backref='game')
def games_query():
games_list = []
for g in Game.query:
games_list.append(g.title)
print(g.title)
return games_list
class ScoreForm(FlaskForm):
name = StringField('Name', validators=[InputRequired()])
score = IntegerField('Score', validators=[InputRequired()])
game = QuerySelectField('Game', query_factory=games_query)
submit = SubmitField('Submit')
games\u query返回以下错误,尽管在控制台中打印g.title返回有效值(游戏标题):
sqlalchemy.orm.exc.UnmappedInstanceError:类'builtins.str'不是
映射
编辑:将查询工厂设置为返回基本列表的函数会导致显示相同的错误
def games_query():
games_list = ["Mario", "Zelda"]
return games_list
如何绕过该错误,以便games\u query返回可作为选项传递到相关表单字段的游戏标题列表
def games_query():
games_list = []
for row in Game.query:
games_list.append(row.__dict__['title'])
print(row.__dict__['title'])
return games_list
试试看我已经找到了导致错误的原因。解决方案如下 查询工厂功能只能返回完整的查询(不是列表,也不是查询的单列): 默认情况下,与FlaskForm相关的Jinja代码将显示主键列,除非使用get_标签属性在FlaskForm中设置特定列:
class ScoreForm(FlaskForm):
name = StringField('Name', validators=[InputRequired()])
score = IntegerField('Score', validators=[InputRequired()])
game = QuerySelectField('Game', query_factory=games_query, get_label='title')
submit = SubmitField('Submit')
感谢您的帮助,但通过您的解决方案,我得到了完全相同的错误消息(“类'builtins.str'未映射”)。哦,我有相同的代码,但运行良好,检查模型,并添加:tablename='Game'。更新了初始帖子,因为我意识到错误与烧瓶表单有关,而不是与查询工厂有关。
class ScoreForm(FlaskForm):
name = StringField('Name', validators=[InputRequired()])
score = IntegerField('Score', validators=[InputRequired()])
game = QuerySelectField('Game', query_factory=games_query, get_label='title')
submit = SubmitField('Submit')