SQLAlchemy原生查询按列名访问字段报错,求解决方案
解决方法
当你使用session.execute()执行原生SQL时,默认返回的结果是元组(旧版本SQLAlchemy中为普通元组),元组仅支持整数索引访问,因此用字符串列名会触发tuple indices must be integers or slices, not str错误。要通过列名访问字段,可采用以下几种常用方式:
方式一:返回字典映射结果
调用Result对象的mappings()方法,将结果转换为字典格式,即可直接通过列名字符串访问:
games = session.execute(statement=text('select game.id as id, * from game')).mappings().all() for game in games: print(game['id'])
方式二:返回命名元组
使用namedtuples()方法,结果会以命名元组形式返回,你可以通过属性名(对应列名)访问字段:
games = session.execute(statement=text('select game.id as id, * from game')).namedtuples().all() for game in games: print(game.id)
方式三:使用ORM模型查询(若有对应模型)
如果已经定义了Game ORM模型,直接用session.query()查询会返回模型实例,天然支持属性访问:
from your_module import Game games = session.query(Game).all() for game in games: print(game.id)
内容的提问来源于stack exchange,提问作者Rony Tesler
相关产品推荐
相关产品推荐

