【问题标题】:Working with MySQL booleans in python在 python 中使用 MySQL 布尔值
【发布时间】:2010-10-10 13:51:31
【问题描述】:

我在 python 中查询 MySQL 数据库并选择一个布尔值——所以 MySQL 的响应是字符串“True”或“False”。我想根据 MySQL 的布尔值执行进一步的代码。

例如

data = 'False'  # assume this is what was returned by MySQL.
if data:
  print 'Success'  #really this would be where I would execute other if True.
else:
  print 'Fail'  #really this would be where I would execute other code if False

但我不能这样做,因为

if data:

将始终返回 True

那么如何将 MySQL 返回的字符串转换成 python 中的布尔值呢?

目前我有:

data = 'False'  # assume this is what was returned by MySQL.
if data == 'True':
  print 'Success'
else:
  print 'Fail'

我相信在 python 中一定有更好的方法来做到这一点——很可能我缺少一些简单的东西。

【问题讨论】:

    标签: python mysql boolean


    【解决方案1】:

    MySQL 中的布尔值是 TINYINT(1)。检查 1 或 0 可能会起作用

    【讨论】:

    • 谢谢!。我不确定那将如何工作。具体来说,MySQL 当前返回 True 或 False。有没有办法可以将它转换为 Int?这是一个示例 SQL 查询 SELECT IsRegistered FROM Users WHERE email = "email@email.com";这将返回 True 或 False。如何将其转换为 int?
    • 您可以获取单行来检查查询是否返回空集或现在。在原始 SELECT 之后立即执行和获取“SELECT FOUND_ROWS()”的值也应该可以工作。
    【解决方案2】:

    如果该列始终是实际字符串 "False""True" 之一(而不是整数或其他内容),那么我建议对以下内容进行一些更改:

    value = {'False' : False, 'True' : True}[data]
    

    【讨论】:

      【解决方案3】:

      如果您的数据库连接不知道如何为您转换值,那么您需要使用更好的连接。这不应该是您需要自己做的事情。如果这些不是实际的布尔值,而只是一个仅存储 0 或 1 的 int 列,那么您应该修复您的架构。或者,如果你总是得到值 'True' 和 'False',也许你不小心将它转换为某个地方的字符串?

      【讨论】:

        【解决方案4】:

        您可以在 MySQLdb 目录下的 converters.py 文件中找到 MySQLDdb 转换值的位置。

        这是处理 bool 的 sn-p:

        conversions = {
            ...
            types.BooleanType: Bool2Str,
            ...
        }
        

        还有 Bool2Str 函数:

        def Bool2Str(s, d): return str(int(s))
        

        如果您想要不同的行为,请导入转换字典并进行更改。

        【讨论】:

          【解决方案5】:

          您可以使用ord,它返回一个表示Unicode 的整数。

          例子:

          if ord(data):
              print("True")
          
          if not ord(data):
              print("False")
          

          【讨论】:

            【解决方案6】:

            您的解决方案实际上还可以,但还有其他选择:

            如果您使用的是 Python 2.5 或更高版本,则可以缩短 if 语句:

            print 'Success' if data == 'True' else 'Fail'
            

            如果您发现自己经常重复检查,您可以考虑为其编写一个函数以使其更具可读性:

            def is_true(mysql_boolean):
                if mysql_boolean == "True":
                    return True
                else:
                    return False
            
            # now you can use this:
            if is_true(data):
                # this is really going to be more than one line of code anyway.
                # or maybe a function call, in which your solution might be enough.
                print "Success"
            else:
                print "Fail"
            

            你可以用字典来达到同样的效果,但我不觉得这很优雅:

            mysql_bool = {'True': True, 'False': False}
            
            if mysql_bool[data]:
                print "Success"
            

            也就是说,你用什么来连接数据库?可能有一种方法可以直接从那里得到一个布尔值。请更新您的问题!

            【讨论】:

              【解决方案7】:

              这处理它由 MySQLdb 返回的方式。

              if data == '\x01':
                print 'Success'
              else:
                print 'Fail'
              

              验证这适用于 Python 3.6

              if data == b'\x01':
                print('Success')
              else:
                print('Fail')
              

              【讨论】:

                猜你喜欢
                • 2011-11-01
                • 2010-12-17
                • 1970-01-01
                • 2017-06-01
                • 1970-01-01
                • 1970-01-01
                • 2013-05-06
                • 1970-01-01
                • 2011-03-30
                相关资源
                最近更新 更多