在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布尔值的主要内容,如果未能解决你的问题,请参考以下文章