diff options
Diffstat (limited to 'cgi/database.py')
-rw-r--r-- | cgi/database.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/cgi/database.py b/cgi/database.py new file mode 100644 index 0000000..c8611c5 --- /dev/null +++ b/cgi/database.py @@ -0,0 +1,69 @@ +# coding=utf-8 + +import threading +import _mysql +from settings import Settings + +database_lock = threading.Lock() + +try: + # Although SQLAlchemy is optional, it is highly recommended + import sqlalchemy.pool as pool + _mysql = pool.manage( module = _mysql, + pool_size = Settings.DATABASE_POOL_SIZE, + max_overflow = Settings.DATABASE_POOL_OVERFLOW) + Settings._.USING_SQLALCHEMY = True +except ImportError: + pass + +def OpenDb(): + if Settings._.CONN is None: + Settings._.CONN = _mysql.connect(host = Settings.DATABASE_HOST, + user = Settings.DATABASE_USERNAME, + passwd = Settings.DATABASE_PASSWORD, + db = Settings.DATABASE_DB) + +def FetchAll(query, method=1): + """ + Query and fetch all results as a list + """ + db = Settings._.CONN + + db.query(query) + r = db.use_result() + return r.fetch_row(0, method) + +def FetchOne(query, method=1): + """ + Query and fetch only the first result + """ + db = Settings._.CONN + + db.query(query) + r = db.use_result() + try: + return r.fetch_row(1, method)[0] + except: + return None + +def UpdateDb(query): + """ + Update the DB (UPDATE/DELETE) and return # of affected rows + """ + db = Settings._.CONN + + db.query(query) + return db.affected_rows() + +def InsertDb(query): + """ + Insert into the DB and return the primary key of new row + """ + db = Settings._.CONN + + db.query(query) + return db.insert_id() + +def CloseDb(): + if Settings._.CONN is not None: + Settings._.CONN.close() |