Explorar el Código

Made it easier to use a DictCursor.

tags/v0.1^2
Ben Kurtovic hace 15 años
padre
commit
e6ddbca28e
Se han modificado 1 ficheros con 24 adiciones y 15 borrados
  1. +24
    -15
      bot/wiki/site.py

+ 24
- 15
bot/wiki/site.py Ver fichero

@@ -473,32 +473,35 @@ class Site(object):
""" """
return self._api_query(kwargs) 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. """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. If `plain_query` is True, we will force an unparameterized query.
Specifying both params and plain_query will cause an error. 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 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. 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. 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 This may raise SQLError() or one of oursql's exceptions
(oursql.ProgrammingError, oursql.InterfaceError, ...) if there were (oursql.ProgrammingError, oursql.InterfaceError, ...) if there were
problems with the query. problems with the query.
@@ -506,6 +509,12 @@ class Site(object):
if not self._sql_conn: if not self._sql_conn:
self._sql_connect() 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: with self._sql_conn.cursor(cursor_class, show_table=show_table) as cur:
cur.execute(query, params, plain_query) cur.execute(query, params, plain_query)
for result in cur: for result in cur:


Cargando…
Cancelar
Guardar