最近我发现SQLAlchemy的Column默认不起作用,因为我期望它:
>>> Base = declarative_base()
>>> class TestModel(Base):
... __tablename__ = 'tmodel'
... id = sa.Column(sa.Integer, primary_key=True)
... foo = sa.Column(sa.Integer, default=0)
...
>>> tmodel_instance = TestModel()
>>> print tmodel_instance.foo
None
>>> session.add(tmodel_instance)
>>> print tmodel_instance.foo
None
>>> session.commit()
>>> print tmodel_instance.foo
0
Run Code Online (Sandbox Code Playgroud)
我希望在对象实例化之后tmodel_instance.foo立即相等0,但似乎默认值仅在执行INSERT命令时使用,它确实让我感到困惑.为什么一个人更喜欢 default结束server_default?我如何实现我想要的目标?我应该指定所有默认参数__init__吗?这似乎是代码重复:更改默认值我必须将其更改两次并保持这些值相等 - 是否有某种方法可以避免这种情况?
我有一个声明基础模型:
class User(Base):
id = Column(Integer, primary_key=True)
money = Column(Integer, default=100)
Run Code Online (Sandbox Code Playgroud)
然后我跑了
>>> u = User()
>>> u.money
None
Run Code Online (Sandbox Code Playgroud)
如何在不向数据库写入任何内容的情况下使用sqlalchemy填充默认值?