代码无改动新增资产时报TypeError:'AssetId'为Assets无效关键字参数求助
报错核心原因
该错误说明你定义的Assets ORM模型类中,没有名为AssetId的字段属性,因此实例化传参时无法识别该参数。
排查步骤
第一步:核对
找到你声明Assets模型的字段定义Assets类的代码,确认字段变量名是否和你传参的键名完全一致。注意:SQLAlchemy 实例化传参用的是你代码里写的字段变量名,不是数据库表的列名,除非你在字段参数中单独用name指定了映射的表列名。
举个反例,如果你的模型是如下写法:
你传class Assets(Base): __tablename__ = 'assets' # 字段变量名是asset_id,只在映射数据库时对应列名AssetId asset_id = Column(Integer, primary_key=True, name='AssetId') asset_name = Column(String, name='AssetName') # 其余字段省略AssetId参数就会触发报错,必须传和变量名一致的asset_id。第二步:校验当前模型的合法字段
可以在实例化Assets的代码前加一行调试语句,直接输出该模型支持的所有合法字段名,快速对比是否匹配:
输出的列表中如果没有# 加在 new_asset = Assets(...) 代码之前 print(Assets.__mapper__.columns.keys())AssetId,即可确认是参数名和字段名不匹配的问题。第三步:排查额外触发场景
如果你确定之前代码能正常运行、也没改过接口逻辑,优先检查以下变动:- 是否有人修改过
Assets模型的字段命名规则 - 是否升级了SQLAlchemy版本,部分版本对无效传参的校验逻辑更严格
- 是否导错了
Assets类,导入了其他同名的非ORM类
- 是否有人修改过
额外注意
你贴出的代码存在缩进错误:db_engine = create_engine(...)开始的所有函数内代码都没有正确缩进,后续session.add、session.commit的缩进也和函数层级不匹配,修复参数问题后也要同步调整缩进,否则会触发语法错误。
内容的提问来源于stack exchange,提问作者Ayen
相关产品推荐
相关产品推荐

