Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pythonic Boolean Conversion

I'm writing a module to act on data being sent to a database from Python. Since boolean is not a SQL datatype, those values have to be converted to some pre-defined value. I decided while defining the tables that I would use 'T' and 'F' in a varchar(1) field as my Boolean stand in.

In attempting to make this conversion while being properly Pythonic, I did a direct comparison and acted on the results, as so:

        if SQLParameters[i] == True:
            SQLParameters[i] = 'T'                
        elif SQLParameters[i] == False:
            SQLParameters[i] = 'F'

This is on code that runs regardless of type, so if SQLParameters[i] is 1 or "Blarg" or 123, I just want to leave it alone, whereas when it's a Boolean, I need to perform the conversion.

This worked just fine until I tried to insert the actual value 1 (one), at which point I learned that 1 == True = True. I can plainly see two possible solutions for this issue:

  1. change the data dictionary to use 0 and 1 in a number(1) field as the Boolean stand-in, making the conversion simpler
  2. add a condition to the code above to check the actual type of the parameter to be converted (which strikes me as unpythonic).

Does anyone have an idea about how to accomplish this without either changing the data dictionary or explicitly checking the type?

like image 385
Allan Avatar asked Dec 09 '22 13:12

Allan


1 Answers

You can use is:

if SQLParameters[i] is True:
    SQLParameters[i] = 'T'                
elif SQLParameters[i] is False:
    SQLParameters[i] = 'F'
like image 175
sth Avatar answered Dec 21 '22 08:12

sth