Python Mysql TypeError: 'NoneType' object is not subscriptable

12,109

st = str(row[2]) is an error because cursor.fetchone() returns None when there are no more rows.

Fix it with one of these approaches:

row = cursor.fetchone()
while row:
    do_stuff()
    row = cursor.fetchone()

or

for row in cursor:
    do_stuff()

or

while True:
    row = cursor.fetchone()
    if row is None:  # better: if not row
          break
    do_stuff()
Share:
12,109
Varanka
Author by

Varanka

Updated on June 22, 2022

Comments

  • Varanka
    Varanka almost 2 years
    conn = MySQLdb.connect (host = "localhost", user="root", passwd="xxxx", db="xxxxx")
         cursor = conn.cursor()
         cursor.execute ("SELECT * FROM pin WHERE active=1")
         while (1):
           row = cursor.fetchone()
           st = str(row[2])
           pin = str(row[1])
           order = str(st)+str(pin)
           if row == None:
              break
           sendSerial(order)
    conn.close()
    

    Why st = str(row[2]) become error? How should retrieve rows from the database into a variable?

    Thank You for your answer.

  • Steven Rumbalski
    Steven Rumbalski about 12 years
    do_stuff is nothing. It's just a way of saying "the rest of your code goes here".