SQLAlchemy boolean value is None
I have this table in my Pyramid app
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
When I did my test, it said is_active
is 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)
From my integration log I see when we are creating the row, is_active
is set to None. Why?
You have to set a default value otherwise None/NULL is used:
is_active = Column(Boolean, unique=False, default=True)
You wanted to do this in __init__
but you used is_active = True
(a local variable) instead of self.is_active = True
.
If you're using Flask-SQLAlchemy, you can use this command to create a server side default.
from sqlalchemy.sql import expression
active = db.Column(db.Boolean, server_default=expression.true(), nullable=False)
This will create a default value on the database so anyone can write to it and the DB will have the default value.
is_active = Column(Boolean, server_default='t', default=True)