2

我在 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 中必须有更好的方法来做到这一点——很可能我缺少一些简单的东西。

4

7 回答 7

3

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

于 2009-02-28T23:24:17.010 回答
2

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

value = {'False' : False, 'True' : True}[data]
于 2009-03-01T00:19:40.013 回答
2

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

于 2009-03-01T00:56:37.663 回答
2

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

这是处理 bool 的片段:

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

和 Bool2Str 函数:

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

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

于 2009-03-02T04:43:23.070 回答
1

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

例子:

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

if not ord(data):
    print("False")
于 2017-05-17T10:21:33.750 回答
0

这处理了 MySQLdb 返回的方式。

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

验证这适用于 Python 3.6

if data == b'\x01':
  print('Success')
else:
  print('Fail')
于 2013-01-28T01:37:21.340 回答
0

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

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

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

于 2009-03-01T16:28:36.970 回答