在python中使用MySQL布尔值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中使用MySQL布尔值相关的知识,希望对你有一定的参考价值。

我在python中查询MySQL数据库并选择一个布尔值 - 所以MySQL的响应是字符串'True'或'False'。我想基于MySQL的布尔值执行更多代码。

EG

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中必须有更好的方法来做到这一点 - 可能有一些我想念的简单。

答案

MySQL中的布尔值是TINYINT(1)。检查1或0可能有效

另一答案

如果列总是一个实际的字符串"False""True"(而不是整数或其他),那么我建议一些变化:

value = {'False' : False, 'True' : True}[data]
另一答案

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

另一答案

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

这是处理bool的片段:

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

和Bool2Str功能:

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

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

另一答案

你的解决方案实际上还不错,但有其他选择:

如果您使用的是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"

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

另一答案

您可以使用返回表示Unicode的整数的ord

例:

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

if not ord(data):
    print("False")
另一答案

这会处理MySQLdb返回的方式。

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

验证这适用于Python 3.6

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

以上是关于在python中使用MySQL布尔值的主要内容,如果未能解决你的问题,请参考以下文章

在 perl 中使用 XPath 读取 Mac Plist 布尔值

用python输入布尔值[重复]

用于存储布尔值的 MySQL 数据类型

用于存储布尔值的 MySQL 数据类型

用于存储布尔值的 MySQL 数据类型

python的〜在使用布尔值时发生了啥?