- Prima di tutto hai una sintassi sbagliata nel tuo codice. Python non ha un
try...catch
bloccare. Hatry...except
blocco che viene utilizzato in questo modo:
try:
# something here
except:
# something here
- 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.