Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQLdb - Vérifier si la ligne existe Python

  1. Tout d'abord, vous avez une mauvaise syntaxe dans votre code. Python n'a pas de try...catch bloquer. Il a try...except bloc qui est utilisé comme ceci :
try:
    # something here
except:
    # something here
  1. MySQL ne renvoie pas d'erreur lorsque vous utilisez SELECT commande. Cependant, il existe deux façons différentes de savoir s'il a renvoyé quelque chose ou non.

PYTHON 2.7

cursor.execute(
    "SELECT Name, COUNT(*) FROM Item_Info WHERE Name = %s GROUP BY Name",
    (item_name,)
)
# gets the number of rows affected by the command executed
row_count = cursor.rowcount
print "number of affected rows: {}".format(row_count)
if row_count == 0:
    print "It Does Not Exist"

PYTHON 3+

cursor.execute(
    "SELECT Name, COUNT(*) FROM Item_Info WHERE Name = %s GROUP BY Name",
    (item_name,)
)
# gets the number of rows affected by the command executed
row_count = cursor.rowcount
print ("number of affected rows: {}".format(row_count))
if row_count == 0:
    print ("It Does Not Exist")

Une autre façon de procéder serait de récupérer la déclaration et de vérifier si elle est vide :

# execute statement same as above  
msg = cursor.fetchone()  
# check if it is empty and print error
if not msg:
    print 'It does not exist'

C'est ma première réponse, donc je ne sais pas comment styliser correctement le code dans la réponse, cela semble aussi désordonné à cause de cela. Désolé pour ça.

J'utilise aussi Python 3 et pymysql, donc il peut y avoir une erreur de syntaxe mais j'ai essayé d'écrire le code selon python 2.7 d'après ce dont je me souviens à ce sujet.

MODIFIER (01/05/2020)

Merci à @Arishta d'avoir souligné que la première méthode vous demandera de récupérer toutes les lignes avant d'utiliser row_count. c'est-à-dire en ajoutant cursor.fetchall() avant le row_count = cursor.rowcount

cursor.execute(
    "SELECT Name, COUNT(*) FROM Item_Info WHERE Name = %s GROUP BY Name",
    (item_name,)
)
# Add THIS LINE
results = cursor.fetchall()
# gets the number of rows affected by the command executed
row_count = cursor.rowcount
print("number of affected rows: {}".format(row_count))
if row_count == 0:
    print("It Does Not Exist")

Utilisez le cursor.fetchone() si vous ne vous souciez que de savoir si l'enregistrement existe ou non.