2009-02-28 6 views
2

J'interroge une base de données MySQL en python et sélectionne une valeur booléenne - donc la réponse de MySQL est soit la chaîne 'True' ou 'False'. Je voudrais exécuter plus de code basé sur la valeur booléenne de MySQL.Utilisation de booléens MySQL en python

E.g.

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 

Mais je ne peux pas le faire parce que

if data: 

retournera toujours vrai

Alors, comment puis-je convertir la chaîne que MySQL retourne dans un booléen en python?

Actuellement, j'ai:

data = 'False' # assume this is what was returned by MySQL. 
if data == 'True': 
    print 'Success' 
else: 
    print 'Fail' 

Je crois qu'il doit y avoir une meilleure façon de le faire en python - probablement il y a quelque chose de simple que je suis absent.

Répondre

2

Boolean dans MySQL est TINYINT (1). Vérification de 1 ou 0 pourrait fonctionner

+0

Merci !. Je ne suis pas sûr comment cela fonctionnerait bien. En particulier, MySQL retourne actuellement True ou False. Y a-t-il un moyen de le lancer dans un Int? Voici un exemple de requête SQL SELECT IsRegistered FROM Users WHERE email = "[email protected]"; Cela renvoie Vrai ou Faux. Comment puis-je le lancer dans un int? –

+0

Vous pouvez récupérer une seule ligne pour vérifier si la requête renvoie un ensemble vide ou maintenant. L'exécution et la récupération de la valeur de "SELECT FOUND_ROWS()" juste après le SELECT d'origine doivent également fonctionner. – Imran

2

Si la colonne est toujours l'une des chaînes réelles "False" ou "True" (par opposition à des entiers ou quelque chose) alors je vous recommande une certaine variation sur:

value = {'False' : False, 'True' : True}[data] 
2

Si votre La connexion db ne sait pas comment transformer les valeurs pour vous, alors vous devez en utiliser une meilleure. Cela ne devrait pas être quelque chose que vous devez faire vous-même. Si ce ne sont pas des booléens réels, mais juste une colonne int vous ne stockez que 0 ou 1, alors vous devez corriger votre schéma. Alternativement, si vous obtenez toujours les valeurs 'True' et 'False', peut-être que vous le convertissez accidentellement en une chaîne quelque part?

0

Votre solution est en fait assez bien, mais il existe des alternatives:

Si vous utilisez Python 2.5 ou supérieur, vous pouvez raccourcir l'instruction if:

print 'Success' if data == 'True' else 'Fail' 

Si vous vous trouvez répéter la vérifier souvent, vous pourriez envisager d'écrire une fonction pour pour le rendre plus lisible:

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" 

vous pouvez obtenir la même chose avec un dictionnaire, mais je ne trouve pas aussi élégant:

mysql_bool = {'True': True, 'False': False} 

if mysql_bool[data]: 
    print "Success" 

Cela dit, qu'est-ce que vous utilisez pour vous connecter à la base de données? Il y a probablement un moyen d'obtenir directement un bool de là-bas. S'il vous plaît mettre à jour votre question!

2

Vous pouvez trouver l'emplacement MySQLDdb convertit les valeurs dans le fichier convertters.py dans le répertoire MySQLdb.

est ici l'extrait traitant bool:

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

Et la fonction Bool2Str:

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

Si vous voulez un comportement différent, importez les conversions dict et le changer.

0

Cela gère la façon dont il est retourné par MySQLdb.

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

vérifié cela fonctionne pour Python 3,6

if data == b'\x01': 
    print('Success') 
else: 
    print('Fail') 
0

Vous pouvez utiliser ord qui renvoie un nombre entier représentant l'Unicode.

Exemple:

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

if not ord(data): 
    print("False")