Flask-SQLAlchemy SQLITE boolean field always returns False Flask-SQLAlchemy SQLITE boolean field always returns False sqlite sqlite

Flask-SQLAlchemy SQLITE boolean field always returns False


with same code can not reproduce on OSX with Python 2.7.10, SQLAlchemy==1.0.9 and Flask-SQLAlchemy==2.1, Flask==0.10.1:

#!/usr/bin/env python# encoding: utf-8from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'db = SQLAlchemy(app)class User(db.Model):    id = db.Column(db.Integer, primary_key=True)    username = db.Column(db.String(80), unique=True)    email = db.Column(db.String(120), unique=True)    can_view_records = db.Column(db.Boolean, default=False, nullable=False)    def __init__(self, username, email, can_view_records):        self.username = username        self.email = email        self.can_view_records = can_view_records    def __repr__(self):        return '<User %r>' % self.username

generate db:

>>>from app import db, User>>>db.create_all()>>>admin = User('admin', 'admin@example.com', True)>>>guest = User('guest', 'guest@example.com', False)>>>db.session.add(admin)>>>db.session.add(guest)>>>db.session.commit()

sqlite table looks like this:

sqlite> select * from user;1|admin|admin@example.com|12|guest|guest@example.com|0

all query looks okay:

>>>User.query.get(1).can_view_records>>>True>>>User.query.get(2).can_view_records>>>False>>>User.query.filter_by(can_view_records=True).first().can_view_records>>>True