Browse Source

Made it easier to use a DictCursor.

tags/v0.1^2
Ben Kurtovic 12 years ago
parent
commit
e6ddbca28e
1 changed files with 24 additions and 15 deletions
  1. +24
    -15
      bot/wiki/site.py

+ 24
- 15
bot/wiki/site.py View File

@@ -473,32 +473,35 @@ class Site(object):
"""
return self._api_query(kwargs)

def sql_query(self, query, params=(), plain_query=False, cursor_class=None,
show_table=False):
def sql_query(self, query, params=(), plain_query=False, dict_cursor=False,
cursor_class=None, show_table=False):
"""Do an SQL query and yield its results.

For example:
>>> query = "SELECT user_name, user_registration FROM user WHERE user_name IN (?, ?)"
>>> for row in site.sql_query(query, ("EarwigBot", "The Earwig")):
... print row
('EarwigBot', '20090428220032')
('The Earwig', '20080703215134')

<http://packages.python.org/oursql> has helpful documentation on the
SQL module used by EarwigBot.

If `plain_query` is True, we will force an unparameterized query.
Specifying both params and plain_query will cause an error.

`cursor_class` may oursql.Cursor or oursql.DictCursor. If it is not
given, the connection default will be used, which is a regular Cursor
unless _sql_connect() is passed a `default_cursor` kwarg.
If `dict_cursor` is True, we will use oursql.DictCursor as our cursor,
otherwise the default oursql.Cursor. If `cursor_class` is given, it
will override this option.

If `show_table` is True, the name of the table will be prepended to the
name of the column. This will mainly affect a DictCursor.

Example:
>>> query = "SELECT user_id, user_registration FROM user WHERE user_name = ?"
>>> params = ("The Earwig",)
>>> result1 = site.sql_query(query, params)
>>> result2 = site.sql_query(query, params, dict_cursor=True)
>>> for row in result1: print row
(7418060L, '20080703215134')
>>> for row in result2: print row
{'user_id': 7418060L, 'user_registration': '20080703215134'}

See _sql_connect() for information on how a connection is acquired.

<http://packages.python.org/oursql> has helpful documentation on the
oursql module.

This may raise SQLError() or one of oursql's exceptions
(oursql.ProgrammingError, oursql.InterfaceError, ...) if there were
problems with the query.
@@ -506,6 +509,12 @@ class Site(object):
if not self._sql_conn:
self._sql_connect()

if not cursor_class:
if dict_cursor:
cursor_class = oursql.DictCursor
else:
cursor_class = oursql.Cursor

with self._sql_conn.cursor(cursor_class, show_table=show_table) as cur:
cur.execute(query, params, plain_query)
for result in cur:


Loading…
Cancel
Save