私のピラミッドアプリにこのテーブルがあります
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に設定されています。どうして?
デフォルト値を設定する必要があります。それ以外の場合は、None/NULLが使用されます。
is_active = Column(Boolean, unique=False, default=True)
これを__init__
を使用しましたが、is_active = True
(ローカル変数)の代わりにself.is_active = True
。
is_active = Column(Boolean, server_default='t', default=True)
Flask-SQLAlchemyを使用している場合は、このコマンドを使用してサーバー側のデフォルトを作成できます。
from sqlalchemy.sql import expression
active = db.Column(db.Boolean, server_default=expression.true(), nullable=False)
これにより、データベースにデフォルト値が作成されるため、誰でもデータベースに書き込むことができ、DBにもデフォルト値が設定されます。