- Przede wszystkim masz złą składnię w kodzie. Python nie ma
try...catch
blok. Matry...except
blok używany w ten sposób:
try:
# something here
except:
# something here
- MySQL nie zwraca błędu, gdy używasz
SELECT
Komenda. Istnieją jednak dwa różne sposoby sprawdzenia, czy coś zwróciło, czy nie.
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")
Innym sposobem, aby to zrobić, byłoby pobranie instrukcji i sprawdzenie, czy jest ona pusta:
# execute statement same as above
msg = cursor.fetchone()
# check if it is empty and print error
if not msg:
print 'It does not exist'
To jest moja pierwsza odpowiedź, więc nie wiem, jak prawidłowo wystylizować kod w odpowiedzi, z tego powodu wydaje się to również nieuporządkowane. Przepraszamy za to.
Używam również Pythona 3 i pymysql, więc może być jakiś błąd składni, ale próbowałem napisać kod zgodnie z python 2.7 z tego, co pamiętałem.
EDYTUJ (5/1/2020)
Podziękowania dla @Arishta za wskazanie, że pierwsza metoda będzie wymagała pobrania wszystkich wierszy przed użyciem row_count. czyli dodanie cursor.fetchall()
przed 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")
Użyj cursor.fetchone()
jeśli zależy Ci tylko na tym, czy rekord istnieje, czy nie.