Логическое значение SQLAlchemy - None

У меня есть эта таблица в приложении Pyramid

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. Почему?

Ответы

Ответ 1

Вы должны установить значение по умолчанию, иначе None/NULL используется:

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

Вы хотели сделать это в __init__, но вместо self.is_active = True вы использовали is_active = True (локальную переменную).

Ответ 2

is_active = Column(Boolean, server_default='t', default=True)

Ответ 3

Если вы используете Flask-SQLAlchemy, вы можете использовать эту команду для создания значения по умолчанию для сервера.

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

Это создаст значение по умолчанию в базе данных, чтобы каждый мог записать его, а БД будет иметь значение по умолчанию.