2017-09-18 5 views
0

J'ai une application Flask connectée à une base de données MySql en utilisant SqlAlchemy. Le tableau a 3 x champs booléens (bit) comme indiqué ci-dessous:Flask SqlAlchemy MySql Type booléen retourne toujours vrai

+------------------------+---------------+------+-----+-------------------+----------------+ 
| Field     | Type   | Null | Key | Default   | 
Extra   | 
+------------------------+---------------+------+-----+-------------------+----------------+ 
| ID      | int(11)  | NO | PRI | NULL    | 
auto_increment | 
| clientID    | int(11)  | YES |  | NULL    |     
| 
| accountType   | varchar(2) | YES |  | NULL    |     
| 
| systemType    | varchar(1) | YES |  | NULL    |     
| 
| clientName    | varchar(400) | YES |  | NULL    |     
| 
| clientURL    | varchar(5000) | YES |  | NULL    |     
| 
| clientTelephone  | varchar(300) | YES |  | NULL    |     
| 
| clientAddressLine1  | varchar(500) | YES |  | NULL    |     
| 
| clientAddressLine2  | varchar(500) | YES |  | NULL    |     
| 
| clientAddressLine3  | varchar(500) | YES |  | NULL    |     
| 
| clientPostcode   | varchar(50) | YES |  | NULL    |     
| 
| clientCountry   | varchar(100) | YES |  | NULL    |     
| 
| accessBenchmarking  | bit(1)  | YES |  | NULL    |     
| 
| accessTechnicalSupport | bit(1)  | YES |  | NULL    |     
| 
| accountLive   | bit(1)  | YES |  | NULL    |     
| 
| clientTown    | varchar(100) | YES |  | NULL    |     
| 
| clientCounty   | varchar(100) | YES |  | NULL    |     
| 
| dateTimeStamp   | timestamp  | YES |  | CURRENT_TIMESTAMP |     
| 
+------------------------+---------------+------+-----+-------------------+----------------+ 

Chacun des champs de bits a une valeur à 0.

Le modèle SQLAlchemy en est:

class ClientAccounts(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    clientID = db.Column(db.Integer) 
    accountType = db.Column(db.Text(2)) 
    systemType = db.Column(db.Text(1)) 
    clientName = db.Column(db.Text(400)) 
    clientURL = db.Column(db.Text(5000)) 
    clientTelephone = db.Column(db.Text(300)) 
    clientAddressLine1 = db.Column(db.Text(500)) 
    clientAddressLine2 = db.Column(db.Text(500)) 
    clientAddressLine3 = db.Column(db.Text(500)) 
    clientPostcode = db.Column(db.Text(50)) 
    clientCountry = db.Column(db.Text(100)) 
    accessBenchmarking = db.Column(db.Boolean) 
    accessTechnicalSupport = db.Column(db.Boolean) 
    accountLive = db.Column(db.Boolean) 
    clientTown = db.Column(db.Text(100)) 
    clientCounty = db.Column(db.Text(100)) 

Le code pour récupérer les valeurs est ici:

#check for valid and live user account 
CheckAccount = ClientAccounts.query.filter_by(
clientID=accountNo, 
).first() 
if not CheckAccount is None: 

    accessBenchmarking = CheckAccount.accessBenchmarking 
    accessTechnicalSupport = CheckAccount.accessTechnicalSupport 
    accountLive = CheckAccount.accountLive 

print 'db return ...' 

print accessBenchmarking 
print accessTechnicalSupport 
print accountLive 

les valeurs sont toujours retournés en vrai, même si elles une restez sur False dans la base de données. Les Vales retournés peuvent être vu ici:

INFO:sqlalchemy.engine.base.Engine:('11111111', 1) 
db return ... 
True 
True 
True 

Est-ce que quelqu'un a une idée de ce qui la cause?

Répondre

0

J'ai trouvé une solution pour cela. Changer le type de données de champ de bit à tinyint pour chaque champ booléen a fait l'affaire. Je ne sais toujours pas pourquoi le bit ne fonctionne pas avec SqlAlchemy. Peut-être que c'est la version de MySQL Python que j'utilise?