我有一个声明性基础模型:
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 True
Python 布尔对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)