如何在 sqlalchemy 中提交之前应用列默认值

2024-03-04

我有一个声明性基础模型:

class User(Base):
    id = Column(Integer, primary_key=True)
    money = Column(Integer, default=100)

然后我跑

>>> u = User()
>>> u.money
None

如何使用 sqlalchemy 填充默认值without向数据库写入任何内容?


列默认值仅适用于 INSERT 和 UPDATE 语句,因此在您执行之前不会应用.flush()会议。

要在刷新之前在新实例上看到相同的值,您需要在创建新实例时应用默认值;在里面__init__的方法User object:

class User(Base):
    __tablename__ = 'users'

    def __init__(self, **kwargs):
        if 'money' not in kwargs:
             kwargs['money'] = self.__table__.c.money.default.arg
        super(User, self).__init__(**kwargs)

    id = Column(Integer, primary_key=True)
    money = Column(Integer, default=100)

If no money设置属性时,我们直接根据该列配置的默认值添加一个。

请注意,默认值是SQL 表达式,而不是 Python 值,因此您可能必须首先将它们映射到 Python 对象。例如,布尔字段将有一个默认值'false' or 'true'字符串值,而不是False or TruePython 布尔对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 sqlalchemy 中提交之前应用列默认值 的相关文章

随机推荐