gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:01:47 25 4
gpt4 key购买 nike

我有一个基于声明的模型:

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

然后我跑

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

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

最佳答案

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

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

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)

如果没有设置 money 属性,我们直接根据为该列配置的默认值添加一个。

请注意,默认值是 SQL 表达式,而不是 Python 值,因此您可能必须先将它们映射到 Python 对象。例如, bool 字段将具有默认的 'false''true' 字符串值,而不是 FalseTrue Python bool 对象。

关于python - 如何在 sqlalchemy 中提交之前应用列默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13791487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com