Displaying Restaurant Results
display1.py
import sqlite3
try:
db = sqlite3.connect('restaurant.db')
cursor = db.cursor()
cursor.execute("SELECT * FROM menu")
result = cursor.fetchall()
items = ""
if len(result) > 0: #if there are some rows to display:
for row in result:
items += row[1] + "\n" #have to know which column is which...
print(items)
except Exception as error_msg:
print("An error occured:", error_msg)
finally:
db.close()
display2.py
import sqlite3
try:
db = sqlite3.connect('restaurant.db')
db.row_factory = sqlite3.Row #so we can access rows by column name
cursor = db.cursor()
cursor.execute("SELECT * FROM menu")
result = cursor.fetchall()
items = ""
if len(result) > 0:
for row in result:
items += row['title'] + "\n" #now we don't have to know column indexes
print(items)
except Exception as error_msg:
print("An error occured:", error_msg)
finally:
db.close()
#note that now print(result) won't work as it has in the past
display3.py
import sqlite3
querystring = '''
SELECT COUNT(*), category
FROM menu
GROUP BY category
HAVING COUNT(*) > ( /* having more than the minimum: */
SELECT COUNT(*)
FROM menu
GROUP BY category
ORDER BY 1 ASC LIMIT 1 /* smallest category of foods */
)
'''
try:
db = sqlite3.connect('restaurant.db')
db.row_factory = sqlite3.Row
cursor = db.cursor()
cursor.execute(querystring)
result = cursor.fetchall()
items = ""
if len(result) > 0:
for row in result:
items += row['category'] + " " + str(row['COUNT(*)']) + "\n"
print(items)
except Exception as error_msg:
print("An error occured:", error_msg)
finally:
db.close()
What happens when you change the querystring in the final Python example to "SELECT * FROM table_that_doesnt_exist"?