| Index: sitescripts/filterhits/db.py |
| diff --git a/sitescripts/filterhits/db.py b/sitescripts/filterhits/db.py |
| index f09cd500acb559ba696eeb22df860daf912bf865..91264fc8c1c3565c9003e997c56783279cafa74e 100644 |
| --- a/sitescripts/filterhits/db.py |
| +++ b/sitescripts/filterhits/db.py |
| @@ -1,7 +1,7 @@ |
| # coding: utf-8 |
| # This file is part of the Adblock Plus web scripts, |
| -# Copyright (C) 2006-2014 Eyeo GmbH |
| +# Copyright (C) 2006-2015 Eyeo GmbH |
| # |
| # Adblock Plus is free software: you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License version 3 as |
| @@ -15,71 +15,55 @@ |
| # You should have received a copy of the GNU General Public License |
| # along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| -import MySQLdb |
| - |
| -db = None |
| +import itertools, MySQLdb |
| def connect(user, password, database): |
| - global db |
| - if not db: |
| - db = MySQLdb.connect( |
| - user=user, |
| - passwd=password, |
| - db=database, |
| - use_unicode=True, charset="utf8" |
| - ) |
| - return db |
| - |
| -def disconnect(): |
| - global db |
| - if db: |
| - db.close() |
| - db = None |
| - |
| -def escape(s): |
| - return MySQLdb.escape_string(s) |
| + return MySQLdb.connect( |
| + user=user, |
| + passwd=password, |
| + db=database, |
| + use_unicode=True, charset="utf8" |
| + ) |
| -def query(sql, dict_result=False): |
| +def query(db, sql, *params, **kwargs): |
| """ |
| - Executes the query given by the provided SQL and returns the results. |
| - If dict_result keyword argument is provided + True the results will be |
| - returned as a tuple of dictionaries, otherwise a tuple of tuples. |
| + Executes the query given by the provided SQL and returns the results. |
| + If dict_result keyword argument is provided + True the results will be |
| + returned as a tuple of dictionaries, otherwise a tuple of tuples. |
| """ |
| - global db |
| + dict_result=kwargs.pop('dict_result', False) |
| + |
| try: |
| if dict_result: |
| cursor = db.cursor(MySQLdb.cursors.DictCursor) |
| else: |
| cursor = db.cursor() |
| - cursor.execute(sql) |
| + cursor.execute(sql, params) |
| results = cursor.fetchall() |
| finally: |
| if cursor: |
| cursor.close() |
| return results |
| -def write(sql): |
| +def write(db, queries): |
| """ |
| - This writes a given SQL string or iterator of SQL strings to the database. |
| - All given SQL will be run as one transaction and rolled back on error. |
| + This writes a given SQL string or iterator of tuples containing SQL |
|
Sebastian Noack
2015/02/17 14:59:17
Iterators (in Python) are objects that implement t
kzar
2015/02/24 18:05:11
Done.
|
| + strings and any required parameters to the database. All queries will |
| + be run as one transaction and rolled back on error. |
| """ |
| - global db |
| - |
| - if isinstance(sql, str): |
| - sql = [sql] |
| + if isinstance(queries, str): |
| + queries = ((queries,),) |
| try: |
| - # Commit the changes |
| cursor = db.cursor() |
| - for query in sql: |
| - if query: |
| - [cursor.execute(s) for s in query.split(";") if s] |
| - db.commit() |
| + try: |
| + for query in queries: |
| + sql, params = query[0], query[1:] |
|
Sebastian Noack
2015/02/17 14:59:17
I'd prefer to use a two-dimensional tuple here and
kzar
2015/02/24 18:05:11
I like doing it this way for db.query and db.write
Sebastian Noack
2015/02/26 16:39:25
I don't agree. So I am leaving it up to Wladimir.
|
| + cursor.execute(sql, params) |
| + db.commit() |
| + finally: |
| + cursor.close() |
| except MySQLdb.Error: |
| - # On error roll them back |
| if db: |
| db.rollback() |
| raise |
| - finally: |
| - if cursor: |
| - cursor.close() |