Mysql
 sql >> Database >  >> RDS >> Mysql

MySQLdb - Controlla se la riga esiste Python

  1. Prima di tutto hai una sintassi sbagliata nel tuo codice. Python non ha un try...catch bloccare. Ha try...except blocco che viene utilizzato in questo modo:
try:
    # something here
except:
    # something here
  1. MySQL non restituisce un errore quando usi SELECT comando. Tuttavia ci sono due modi diversi per scoprire se ha restituito qualcosa o meno.

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")

Un altro modo per farlo sarebbe recuperare l'istruzione e controllare se è vuota:

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

Questa è la mia prima risposta, quindi non so come definire correttamente il codice nella risposta, sembra anche disordinato per questo. Scusa per questo.

Inoltre uso Python 3 e pymysql, quindi potrebbe esserci qualche errore di sintassi ma ho provato a scrivere il codice secondo Python 2.7 da quello che potevo ricordare a riguardo.

MODIFICA (5/1/2020)

Grazie ad @Arishta per aver sottolineato che il primo metodo richiederà di recuperare tutte le righe prima di utilizzare row_count. cioè aggiungendo cursor.fetchall() prima di 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")

Usa il cursor.fetchone() se ti interessa solo se il record esiste o meno.