SQLAlchemy获取Event表price转INT计算订单总价报错求助
问题:计算预订总价时触发TypeError错误
错误信息:
TypeError: unsupported operand type(s) for *: 'Row' and 'int'
错误原因
你通过with_entities查询得到的不是直接的整数值,而是SQLAlchemy的查询结果对象/Row对象,这类对象无法直接和整数进行乘法运算。同时用户ID的查询也存在相同问题,返回的不是单个ID值。
修正方案
要获取单个字段的具体值,需要使用.scalar()方法提取结果;另外如果当前用户对象已经包含ID属性,直接调用current_user.id会更高效。
修正后的代码
# 获取活动单价:用scalar()提取单个整数值 price = Event.query.with_entities(Event.price).filter_by(id=event).scalar() # 校验活动是否存在,避免None值引发错误 if not price: raise ValueError("指定的活动不存在") # 获取用户ID:直接使用current_user.id更简便,无需再次查询 user_id = current_user.id num_attendees = forms.attendees.data booking = Booking( attendees=num_attendees, total_price=price * num_attendees, user_id=user_id, event_id=event ) db.session.add(booking) db.session.commit()
关键修改点说明
.scalar()方法:用于从查询结果中提取单个值,当查询返回单个字段且仅一条记录时,会直接返回该字段的原生类型(比如这里的Integer)。- 直接使用current_user.id:既然已经获取了
current_user对象,其本身就包含id属性,无需再查询数据库,减少冗余操作。 - 添加存在性校验:增加对
price是否为None的判断,避免后续乘法运算或数据库插入时出现新错误。
内容的提问来源于stack exchange,提问作者Cooper Davies
相关产品推荐
相关产品推荐

