Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: sitescripts/filterhits/db.py

Issue 4615801646612480: Issue 395 - Filter hits statistics backend (Closed)
Patch Set: Improvements regarding comments Created Feb. 17, 2015, 10:50 a.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()

Powered by Google App Engine
This is Rietveld