| @@ -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: | |||