私は宣言ベースのモデルを持っています:
class User(Base):
id = Column(Integer, primary_key=True)
money = Column(Integer, default=100)
そして、私は走ります
>>> u = User()
>>> u.money
None
データベースに何も書き込まずにsqlalchemy を使用してデフォルトを設定するにはどうすればよいですか?
私は宣言ベースのモデルを持っています:
class User(Base):
id = Column(Integer, primary_key=True)
money = Column(Integer, default=100)
そして、私は走ります
>>> u = User()
>>> u.money
None
データベースに何も書き込まずにsqlalchemy を使用してデフォルトを設定するにはどうすればよいですか?
列のデフォルトは INSERT および UPDATE ステートメントにのみ適用されるため.flush()
、セッションが開始されるまで適用されません。
フラッシュする前に新しいインスタンスで同じ値を表示するには、新しいインスタンスの作成時にデフォルトを適用する必要があります。オブジェクトの__init__
メソッドで:User
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
は、列に構成されたデフォルトに基づいて直接追加します。
デフォルトはPython 値ではなくSQL 式であることに注意してください。そのため、最初にそれらを Python オブジェクトにマッピングする必要がある場合があります。たとえば、ブール フィールドには、またはPython ブール オブジェクトではなく、デフォルト値'false'
または'true'
文字列値があります。False
True