sql >> Database >  >> RDS >> Mysql

MySQLdb - Controleer of rij bestaat Python

  1. Allereerst heb je een verkeerde syntaxis in je code. Python heeft geen try...catch blok. Het heeft try...except blok dat als volgt wordt gebruikt:
try:
    # something here
except:
    # something here
  1. MySQL retourneert geen fout wanneer u SELECT gebruikt opdracht. Er zijn echter twee verschillende manieren om erachter te komen of het iets heeft geretourneerd of niet.

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

Een andere manier om dit te doen is door het statement op te halen en te controleren of het leeg is:

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

Dit is mijn eerste antwoord, dus ik weet niet hoe ik de code op de juiste manier in het antwoord moet stylen, daarom lijkt het ook rommelig. Sorry daarvoor.

Ik gebruik ook Python 3 en pymysql, dus er kan een syntaxisfout zijn, maar ik heb geprobeerd de code te schrijven volgens python 2.7 van wat ik me ervan kon herinneren.

BEWERKEN (1-5-2020)

Met dank aan @Arishta voor het erop wijzen dat je bij de eerste methode alle rijen moet ophalen voordat je row_count gebruikt. d.w.z. het toevoegen van cursor.fetchall() voor de 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")

Gebruik de cursor.fetchone() of het je alleen kan schelen of het record bestaat of niet.



  1. Fout met een Symfony-query:verwacht letterlijk, kreeg ''

  2. sql groeperen op versus onderscheiden

  3. CakePHP 3 defaultConnectionName in plug-inmodel werkt niet

  4. Praktische limiet voor de lengte van de SQL-query (met name MySQL)