web-dev-qa-db-ja.com

SQLAlchemyブール値はNoneです

私のピラミッドアプリにこのテーブルがあります

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    .....
    is_active = Column(Boolean, unique=False)
    def __init__(self, name, raw_password):
        is_active = True

テストを行ったところ、is_activeはNoneであると表示されました。

def test_register_user(self):
    user = User('user1', '1234')
    self.sess.add(user)
    self.sess.flush()

    #print user
    #self.assertTrue(user.is_active, True)
    user_db_record = self.sess.query(User).filter_by(name=user.name).first()
    self.assertEqual(user_db_record.is_active, True)

行を作成しているときに表示される統合ログから、is_activeがNoneに設定されています。どうして?

32
user1012451

デフォルト値を設定する必要があります。それ以外の場合は、None/NULLが使用されます。

is_active = Column(Boolean, unique=False, default=True)

これを__init__を使用しましたが、is_active = True(ローカル変数)の代わりにself.is_active = True

46
Jochen Ritzel
is_active = Column(Boolean, server_default='t', default=True)
17
far

Flask-SQLAlchemyを使用している場合は、このコマンドを使用してサーバー側のデフォルトを作成できます。

from sqlalchemy.sql import expression
active = db.Column(db.Boolean, server_default=expression.true(), nullable=False)

これにより、データベースにデフォルト値が作成されるため、誰でもデータベースに書き込むことができ、DBにもデフォルト値が設定されます。

13
Sowmitra Nalla