14

SQLAlchemy Declarative で、一時的または保留中のオブジェクト インスタンスがデフォルト値を持つように、列のデフォルト値を設定するにはどうすればよいですか? 簡単な例:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class A(Base):
  __tablename__ = "A"
  id = Column(Integer, primary_key=True)
  word = Column(String, default="adefault")

a = A()
print a.word

単純に、これからの出力はadefault. もちろん、出力は実際にはNone. セッションに追加する場合でも、セッションNoneをコミット (またはフラッシュ) し、データベースからインスタンス値を再読み取りした場合にのみ、いっぱいになります。

インスタンスをデータベースにフラッシュせずに属性のデフォルトを設定する方法はありますか? ドキュメントを調査してみColumnDefaultましたが、タイプ/python の値を調べて、カスタムの宣言型ベースクラスに手動で設定する明白な方法はないようです。

4

1 に答える 1

13

クラスにコンストラクターを追加し、そこにデフォルト値を設定します。行がデータベースからロードされるとき、コンストラクターは実行されないため、実行しても問題ありません。

class A(Base):
    __tablename__ = "A"
    id = Column(Integer, primary_key=True)
    word = Column(String)

    def __init__(self):
        self.word = "adefault"

a = A()
print a.word

SA Docs__init__にも同様の使用例があります。

于 2012-11-15T01:33:44.377 に答える