You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

关键修改点说明

  1. .scalar()方法:用于从查询结果中提取单个值,当查询返回单个字段且仅一条记录时,会直接返回该字段的原生类型(比如这里的Integer)。
  2. 直接使用current_user.id:既然已经获取了current_user对象,其本身就包含id属性,无需再查询数据库,减少冗余操作。
  3. 添加存在性校验:增加对price是否为None的判断,避免后续乘法运算或数据库插入时出现新错误。

内容的提问来源于stack exchange,提问作者Cooper Davies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:55:20