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
相关产品推荐
相关产品推荐

