【问题标题】:Flask SqlAlchemy MySql Boolean Type Always Returns TrueFlask SqlAlchemy MySql 布尔类型总是返回 True
【发布时间】:2018-02-27 08:36:05
【问题描述】:

我有一个使用 SqlAlchemy 连接到 MySql DB 的 Flask 应用程序。该表有 3 个布尔(位)字段,如下所示:

+------------------------+---------------+------+-----+-------------------+----------------+
| 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 |                
|
+------------------------+---------------+------+-----+-------------------+----------------+

每个位域的值都设置为 0。

用于此的 SqlAlchemy 模型是:

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))

获取值的代码在这里:

#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

这些值始终返回为 True,即使它们在 DB 中设置为 False。返回的值可以在这里看到:

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

有人知道是什么原因造成的吗?

【问题讨论】:

    标签: python mysql sqlalchemy


    【解决方案1】:

    对于那些遇到此线程但没有找到可靠解决方案的人:

    我通过将 MYSQL 连接器从 pymysql 更改为 mysql-connector 来解决此问题。

    pip3 install mysql-connector
    
    'mysql+mysqlconnector://username:password!!@127.0.0.1:3306/'
    

    我迷失了很长时间,才完成了这项工作。不知道连接器会是问题。

    【讨论】:

      【解决方案2】:

      我想出了一个解决办法。将每个布尔字段的字段数据类型从位更改为 tinyint 就可以解决问题。我仍然不知道为什么 bit 不适用于 SqlAlchemy。也许这是我正在使用的 MySql Python 版本?

      【讨论】:

        猜你喜欢
        • 2012-11-16
        • 2019-11-23
        • 1970-01-01
        • 1970-01-01
        • 2019-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-23
        相关资源
        最近更新 更多