Browse Source

Use sqlite3.Row factory in Flaskr

As pointed out in issue #588 sqlite3.Row should be used instead of
using casting to dict(). Also altered the "Easy Querying" Patterns
example to include the more correct way to return rows as dicts.
Did not touch Tutorial examples ("Views"), as these are not up to
date with the current Flaskr code, and the "Show Entries" section
points out the "Easy Querying" section on how to convert to a
dict().
pull/625/head
Gennady Kovshenin 12 years ago
parent
commit
82b29c09ac
  1. 4
      docs/patterns/sqlite3.rst
  2. 7
      examples/flaskr/flaskr.py

4
docs/patterns/sqlite3.rst

@ -76,6 +76,10 @@ dictionaries instead of tuples this can be used::
db.row_factory = make_dicts
Or even simpler::
db.row_factory = sqlite3.Row
Additionally it is a good idea to provide a query function that combines
getting the cursor, executing and fetching the results::

7
examples/flaskr/flaskr.py

@ -42,7 +42,10 @@ def get_db():
"""
top = _app_ctx_stack.top
if not hasattr(top, 'sqlite_db'):
top.sqlite_db = sqlite3.connect(app.config['DATABASE'])
sqlite_db = sqlite3.connect(app.config['DATABASE'])
sqlite_db.row_factory = sqlite3.Row
top.sqlite_db = sqlite_db
return top.sqlite_db
@ -58,7 +61,7 @@ def close_db_connection(exception):
def show_entries():
db = get_db()
cur = db.execute('select title, text from entries order by id desc')
entries = [dict(title=row[0], text=row[1]) for row in cur.fetchall()]
entries = cur.fetchall()
return render_template('show_entries.html', entries=entries)

Loading…
Cancel
Save