Python SQLALchemy查询未返回列';s值(sqlalchemy.orm.exc.unappedinstanceerror:Class';builtins.str';未映射)

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

我试图将SQLAlchemy的查询结果附加到列表中

我的应用程序包含以下模型(“游戏)”和游戏查询(用作FlaskForm的QuerySelectField查询工厂)。 编辑:还添加了FlaskForm,因为问题似乎与表单本身有关,而不是查询工厂

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')