web-dev-qa-db-fra.com

La valeur booléenne SQLAlchemy est None

J'ai cette table dans mon application 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

Quand j'ai fait mon test, il a dit is_active est Aucun.

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)

À partir de mon journal d'intégration, je vois lorsque nous créons la ligne, is_active est défini sur Aucun. Pourquoi?

32
user1012451

Vous devez définir une valeur par défaut sinon None/NULL est utilisé:

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

Vous vouliez le faire en __init__ mais vous avez utilisé is_active = True (une variable locale) au lieu de self.is_active = True.

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

Si vous utilisez Flask-SQLAlchemy, vous pouvez utiliser cette commande pour créer une valeur par défaut côté serveur.

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

Cela créera une valeur par défaut sur la base de données afin que n'importe qui puisse y écrire et la base de données aura la valeur par défaut.

13
Sowmitra Nalla