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

SQLAlchemy操作MySQL:插入数据时如何排除计算列?

解决SQLAlchemy插入时忽略MySQL计算列的问题

核心解决方案:给计算列添加insert=False和update=False参数

MySQL的计算列由数据库端自动计算生成,不需要应用层在插入或更新时提供值。你只需要在SQLAlchemy的Column定义中,给计算列加上insert=False和update=False,就能让SQLAlchemy在生成INSERT/UPDATE语句时自动忽略该列。

修改后的代码示例

class Foo(Base):
    __tablename__ = "foo"
    user_id = Column(INTEGER, ForeignKey("users.id"), nullable=False)
    # 新增insert=False和update=False,告诉SQLAlchemy不要在增改时处理该列
    calculated = Column(INTEGER, nullable=False, insert=False, update=False)

为什么原代码会包含计算列?

原代码中给calculated列设置了default=0,这是应用层默认值,即使你没有显式赋值,SQLAlchemy也会自动把这个默认值放到INSERT语句里。加上insert=False后,SQLAlchemy会彻底跳过该列的插入逻辑,完全交给数据库端的计算规则处理。

额外说明

如果你的计算列是VIRTUAL(非持久化)或STORED(持久化)类型,只要确保Column定义中包含insert=False和update=False,就能适配所有MySQL计算列场景,不需要额外配置server_default或default。

内容的提问来源于stack exchange,提问作者brian goo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:15:37