sql >> Base de Datos >  >> RDS >> Mysql

MySQLdb:compruebe si existe una fila Python

  1. En primer lugar, tiene una sintaxis incorrecta en su código. Python no tiene un try...catch bloquear. Tiene try...except bloque que se usa así:
try:
    # something here
except:
    # something here
  1. MySQL no devuelve un error cuando usa SELECT dominio. Sin embargo, hay dos formas diferentes de averiguar si devolvió algo o no.

PITÓN 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"

PITÓN 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")

Otra forma de hacer esto sería obtener la declaración y verificar si está vacía:

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

Esta es mi primera respuesta, así que no sé cómo diseñar correctamente el código en la respuesta, también parece desordenado por eso. Lo siento por eso.

También uso Python 3 y pymysql, por lo que puede haber algún error de sintaxis, pero he intentado escribir el código de acuerdo con Python 2.7 por lo que puedo recordar al respecto.

EDITAR (5/1/2020)

Gracias a @Arishta por señalar que el primer método requerirá que obtenga todas las filas antes de usar row_count. es decir, agregando cursor.fetchall() antes del 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 el cursor.fetchone() si solo te importa si el registro existe o no.