From 82b29c09ac898042d589d852f1ef6f107fec9f71 Mon Sep 17 00:00:00 2001 From: Gennady Kovshenin Date: Mon, 5 Nov 2012 06:00:46 +0600 Subject: [PATCH] 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(). --- docs/patterns/sqlite3.rst | 4 ++++ examples/flaskr/flaskr.py | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/patterns/sqlite3.rst b/docs/patterns/sqlite3.rst index 45bcc959..76fec0b2 100644 --- a/docs/patterns/sqlite3.rst +++ b/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:: diff --git a/examples/flaskr/flaskr.py b/examples/flaskr/flaskr.py index 8526254d..0647fc7b 100644 --- a/examples/flaskr/flaskr.py +++ b/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)