2017-03-22 3 views
0

Je voudrais vérifier si l'email retourné par une requête est vide. J'utilise le code suivant:Mysql - Comparaison du résultat d'une requête avec une chaîne en Python

query = "select email from u_code where code = '"+code+"'" 
cursor.execute(query) 
result_set = cursor.fetchall() 

length = cursor.rowcount 
if (length==1): 
    print ' result: ' + str(result_set[0]) + ' OK' 
    print ' length of result: ' + str(len(result_set[0])) 

    if (result_set[0] == ''): 
     print("empty email") 
     result = 1; 
    else: 
     print("email taken") 
     result = 0 


print "result: " + str(result) 

La sortie est incorrecte. Il devrait retourner 1 puisque le champ email est vide

result: (u'',) OK 
length of result: 1 
email taken 
result: 0 

Un conseil?

Répondre

1

.fetchall() renvoie une liste de tuples. Donc, votre condition ne sera jamais remplie.

Vous pouvez faire:

if (result_set[0][0] == ''): 
    print("empty email") 
    result = 1; 
else: 
    print("email taken") 
    result = 0 

Ou plus simplement utiliser .fetchone():

result_set = cursor.fetchone() 

if (result_set[0] == ''): 
    print("empty email") 
    result = 1; 
else: 
    print("email taken") 
    result = 0 

Aussi, vous devez interroger votre base de données comme ceci afin d'éviter les risques d'attaques par injection SQL:

query = "select email from u_code where code = %s" 
cursor.execute(query,(code,)) 
1

result_set est un tableau, accessible au premier tuple: result_set[0] =>(u'',) qui a en effet une longueur de 1.

Accès au premier élément (par exemple via result_set[0][0]) vous donnerait la chaîne vide vous Je cherche vraiment.

0

Pour vérifier une valeur existante dans la table, je recommanderais COUNT query

query = "SELECT COUNT(email) FROM u_code WHERE code = %s" 
cursor.execute(query, [code,]) 

# COUNT query always return value, if no matching data 
# it simply return integer value 0, so we can safely take data 
# from result[0] 
result_check = cursor.fetchone() 

if not result_check[0]: 
    print("empty email") 
    result = 1; 
else: 
    print("email taken") 
    result = 0 

print "result: " + str(result)