mirror of
https://github.com/yweber/lodel2.git
synced 2026-10-27 06:41:33 +01:00
Added an getTable function to sqlutils
It takes an EmComponent child class as parameter and return an sqlalchemy Table
This commit is contained in:
parent
b951a0328f
commit
b45e7ea4ee
1 changed files with 65 additions and 45 deletions
|
|
@ -10,64 +10,84 @@ 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',
|
||||
},
|
||||
'driver': 'pymysql',
|
||||
'encoding': 'utf8'
|
||||
},
|
||||
'postgresql': {
|
||||
'driver': 'psycopg2',
|
||||
'encoding': 'utf8',
|
||||
},
|
||||
'sqlite': {
|
||||
'driver': 'pysqlite',
|
||||
'encoding': 'utf8',
|
||||
},
|
||||
}
|
||||
|
||||
sqlcfg = settings.LODEL2SQLWRAPPER
|
||||
|
||||
## Return an engine given a dbconf name
|
||||
# @param ename str: Its a name of an item in django.conf.settings.LODEL2SQLWRAPPER['db']
|
||||
# @param sqlalogging None|bool : If None leave default value, if true activate sqlalchemy logging
|
||||
# @return An sqlalchemy engine
|
||||
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
|
||||
""" 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]
|
||||
@todo Put the check on db config in SqlWrapper.checkConf()
|
||||
"""
|
||||
#Loading confs
|
||||
cfg = sqlcfg['db'][ename]
|
||||
|
||||
edata = ENGINES[cfg['ENGINE']] #engine infos
|
||||
conn_str = ""
|
||||
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']
|
||||
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 '')
|
||||
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'])
|
||||
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)
|
||||
ret = sqla.create_engine(conn_str, encoding=edata['encoding'], echo=sqlalogging)
|
||||
|
||||
logger.debug("Getting engine :"+str(ret))
|
||||
logger.debug("Getting engine :"+str(ret))
|
||||
|
||||
return ret
|
||||
return ret
|
||||
|
||||
## Return a sqlalchemy.MetaData object
|
||||
# @param engine sqlalchemy.engine : A sqlalchemy engine
|
||||
# @return an sql alechemy MetaData instance bind to engine
|
||||
def meta(engine):
|
||||
res = sqla.MetaData()
|
||||
res.reflect(bind=engine)
|
||||
return res
|
||||
res = sqla.MetaData()
|
||||
res.reflect(bind=engine)
|
||||
return res
|
||||
|
||||
## Return an sqlalchemy table given an EmComponent child class
|
||||
# @warning Except a class type not an instance
|
||||
# @param em_class : An EmComponent child class
|
||||
# @return An sqlalchemy table
|
||||
# @throw TypeError if em_instance is an EmComponent or not an EmComponent child class (or an instance)
|
||||
def getTable(cls):
|
||||
from EditorialModel.components import EmComponent #dirty circula inclusion hack
|
||||
if not issubclass(cls, EmComponent) or cls.table == None:
|
||||
raise TypeError("Excepting an EmComponent child class not an "+str(cls))
|
||||
engine = cls.getDbE()
|
||||
return sqla.Table(cls.table, meta(engine))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue