Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQLdb - Verifique se a linha existe Python

  1. Primeiro de tudo, você tem uma sintaxe errada em seu código. Python não tem um try...catch quadra. Tem try...except bloco que é usado assim:
try:
    # something here
except:
    # something here
  1. O MySQL não retorna um erro quando você usa SELECT comando. No entanto, existem duas maneiras diferentes de descobrir se ele retornou algo ou não.

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"

PÍTON 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")

Outra maneira de fazer isso seria buscar a instrução e verificar se ela está vazia:
# 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 é minha primeira resposta, então não sei como estilizar o código na resposta corretamente, também parece confuso por causa disso. Desculpe por isso.

Também uso Python 3 e pymysql, então pode haver algum erro de sintaxe, mas tentei escrever o código de acordo com o python 2.7 do que eu conseguia lembrar.

EDITAR (01/05/2020)

Obrigado a @Arishta por apontar que o primeiro método exigirá que você busque todas as linhas antes de usar row_count. ou seja, adicionando cursor.fetchall() antes do 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")

Use o cursor.fetchone() se você só se importa se o registro existe ou não.