From 745d782ad32db575b3d816ea2c0ff53219e4b08a Mon Sep 17 00:00:00 2001 From: sendiulo Date: Sun, 8 Sep 2013 08:05:21 +0200 Subject: [PATCH] helper_sql.py --- src/helper_sql.py | 66 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/helper_sql.py diff --git a/src/helper_sql.py b/src/helper_sql.py new file mode 100644 index 00000000..0353f9ae --- /dev/null +++ b/src/helper_sql.py @@ -0,0 +1,66 @@ +import threading +import Queue + +sqlSubmitQueue = Queue.Queue() #SQLITE3 is so thread-unsafe that they won't even let you call it from different threads using your own locks. SQL objects can only be called from one thread. +sqlReturnQueue = Queue.Queue() +sqlLock = threading.Lock() + +def sqlQuery(sqlStatement, *args): + sqlLock.acquire() + sqlSubmitQueue.put(sqlStatement) + + if args == (): + sqlSubmitQueue.put('') + else: + sqlSubmitQueue.put(args) + + queryreturn = sqlReturnQueue.get() + sqlLock.release() + + return queryreturn + +def sqlExecute(sqlStatement, *args): + sqlLock.acquire() + sqlSubmitQueue.put(sqlStatement) + + if args == (): + sqlSubmitQueue.put('') + else: + sqlSubmitQueue.put(args) + + sqlReturnQueue.get() + sqlSubmitQueue.put('commit') + sqlLock.release() + +def sqlStoredProcedure(procName): + sqlLock.acquire() + sqlSubmitQueue.put(procName) + sqlLock.release() + +class SqlBulkExecute: + def __enter__(self): + sqlLock.acquire() + return self + + def __exit__(self, type, value, traceback): + sqlSubmitQueue.put('commit') + sqlLock.release() + + def execute(self, sqlStatement, *args): + sqlSubmitQueue.put(sqlStatement) + + if args == (): + sqlSubmitQueue.put('') + else: + sqlSubmitQueue.put(args) + sqlReturnQueue.get() + + def query(self, sqlStatement, *args): + sqlSubmitQueue.put(sqlStatement) + + if args == (): + sqlSubmitQueue.put('') + else: + sqlSubmitQueue.put(args) + return sqlReturnQueue.get() +