Я пишу модуль для обработки данных, отправляемых в базу данных из Python. Поскольку boolean не является типом данных SQL, эти значения должны быть преобразованы в некоторое заданное значение. Я решил при определении таблиц, что я буду использовать «T» и «F» в поле varchar (1) в качестве моего булевского подставки.Pythonic Boolean Conversion
При попытке сделать это преобразование, будучи правильно Pythonic, я сделал прямое сравнение и действовал по результатам, как это:
if SQLParameters[i] == True:
SQLParameters[i] = 'T'
elif SQLParameters[i] == False:
SQLParameters[i] = 'F'
Это на код, который работает независимо от типа, так что если SQLParameters[i]
является 1 или «Blarg» или 123, я просто хочу, чтобы оставить его в покое, в то время как, когда это Boolean, мне нужно выполнить преобразование.
Это работало нормально, пока я не попытался вставить фактическое значение 1 (один), после чего я узнал, что 1 == True = True
. Я могу ясно видеть два возможных решения этой проблемы:
- изменения словарь данных, чтобы использовать 0 и 1 в (1) поле номера как булев дублер, что делает преобразование проще
- добавить условие к приведенному выше коду, чтобы проверить фактический тип параметра, который нужно преобразовать (который поражает меня как unpythonic).
Есть ли у кого-нибудь идеи о том, как это сделать, не меняя словарь данных или явно проверяя тип?
Аллан: какой соединитель базы данных вы используете, не поддерживая логическое преобразование ???? – mouad
Почему вы пытаетесь вставить значение '1' в поле, где действительны только «T» и «F»? Не сравнивайте с True и False; просто скажите 'SQLParameters [i] = True, если SQLParameters [i] else False', поэтому он всегда преобразуется. –
Обратите внимание, что Postgresql имеет собственный Boolean-тип, а MySQL имеет определенное соглашение для булевых (хотя это не собственный тип). –