From 493149cfeb2f048c469dffb49339e49bc2536d29 Mon Sep 17 00:00:00 2001 From: Yann Date: Fri, 5 Jun 2015 14:45:00 +0200 Subject: [PATCH] Added sqlutils functions --- Database/sqlutils.py | 73 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Database/sqlutils.py diff --git a/Database/sqlutils.py b/Database/sqlutils.py new file mode 100644 index 0000000..0945eff --- /dev/null +++ b/Database/sqlutils.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +import os +import re +import logging as logger + +import sqlalchemy as sqla +from django.conf import settings + + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Lodel.settings") + +ENGINES = {'mysql': { + 'driver': 'pymysql', + 'encoding': 'utf8' + }, + 'postgresql': { + 'driver': 'psycopg2', + 'encoding': 'utf8', + }, + 'sqlite': { + 'driver': 'pysqlite', + 'encoding': 'utf8', + }, +} + +sqlcfg = settings.LODEL2SQLWRAPPER + +def getEngine(ename = 'default', sqlalogging = None): + """ Return a sqlalchemy engine + @param read bool: If True return the read engine, else + return the write one + @return a sqlachemy engine instance + + @todo Put the check on db config in SqlWrapper.checkConf() + """ + #Loading confs + cfg = sqlcfg['db'][ename] + + edata = ENGINES[cfg['ENGINE']] #engine infos + conn_str = "" + + if cfg['ENGINE'] == 'sqlite': + #Sqlite connection string + conn_str = '%s+%s:///%s'%( cfg['ENGINE'], + edata['driver'], + cfg['NAME']) + else: + #Mysql and Postgres connection string + user = cfg['USER'] + user += (':'+cfg['PASSWORD'] if 'PASSWORD' in cfg else '') + + if 'HOST' not in cfg: + logger.info('Not HOST in configuration, using localhost') + host = 'localhost' + else: + host = cfg['HOST'] + + host += (':'+cfg['PORT'] if 'PORT' in cfg else '') + + conn_str = '%s+%s://'%(cfg['ENGINE'], edata['driver']) + conn_str += '%s@%s/%s'%(user,host,cfg['NAME']) + + + ret = sqla.create_engine(conn_str, encoding=edata['encoding'], echo=sqlalogging) + + logger.debug("Getting engine :"+str(ret)) + + return ret + +def meta(engine): + res = sqla.MetaData() + res.reflect(bind=engine) + return res