I’ve been hacking around writing random Django apps and scripts lately and came across something I had been meaning to look into over the past couple weeks. What happens when you select a row of data from a database (mysql, sqlite, whatever), that comes back empty and you try to iterate over it? Example: select * from authinfo where username = “foo”, and the user ‘foo’ does not exist.
At first I thought:
would work, but this only gives an error “TypeError: ‘NoneType’ object is unsubscriptable.”
Then I remembered the try/except syntax, which worked great in this instance.
#!/usr/bin/env python import sqlite3 username = "testuser1" password = "foobar" conn = sqlite3.connect("/home/jforman/testsqlite.db") c = conn.cursor() db_query = c.execute("select username from authinfo where username = '%s'" % username) try: db_output = db_query.fetchone().strip() print "output: %s" % db_output except TypeError: print "no user found" c.close() conn.close()
Am I expecting too much that Python can handle iterating over an empty line (and just skip the whole thing) ? Or is this just how it’s done, where every database query-related line is done in a try stanza?