Работа с логическими значениями MySQL в Python
Я запрашиваю базу данных MySQL в python и выбираю логическое значение, поэтому ответ 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 - вероятно, мне не хватает чего-то простого.
Ответов (7)7
Ваше решение на самом деле вполне нормальное, но есть альтернативы:
Если вы используете 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. Пожалуйста, обновите свой вопрос!
Если ваше соединение с базой данных не знает, как преобразовать значения для вас, вам нужно использовать лучший вариант. Это не должно быть чем-то, что вам нужно делать самому. Если это не фактические логические значения, а просто столбец типа int, в котором вы храните только 0 или 1, тогда вам следует исправить свою схему. В качестве альтернативы, если вы всегда получаете значения «Истина» и «Ложь», возможно, вы случайно конвертируете их где-то в строку?
Вы можете найти место, где MySQLDdb преобразует значения в файле converters.py в каталоге MySQLdb.
вот фрагмент, имеющий дело с bool:
conversions = {
...
types.BooleanType: Bool2Str,
...
}
И функция Bool2Str:
def Bool2Str(s, d): return str(int(s))
Если вам нужно другое поведение, импортируйте словарь конверсий и измените его.