1
0
Fork 0
mirror of https://github.com/yweber/lodel2.git synced 2026-10-27 06:41:33 +01:00

Merge branch 'sqlwrapper' of git.labocleo.org:lodel2 into sqlwrapper

This commit is contained in:
Yann 2015-06-04 16:11:32 +02:00
commit 2af27292c7
2 changed files with 85 additions and 73 deletions

View file

@ -1,73 +0,0 @@
# -*- coding: utf-8 -*-
import os
import logging as logger
import sqlalchemy as sql
from Database.sqlwrapper import SqlWrapper
class SqlObject(object):
""" Object that make aliases with sqlalchemy
Example usage of object that inherite from SqlObject :
class foo(SlqObject,...):
def __init__(self, ...):
self.__class__.tname = 'foo_table'
f = foo(...)
req = f.where(f.col.id == 42)
res = f.rexec(req)
e = bar(...)
req = f.join(e.col.id == f.col.id)
res = f.rexec(req)
"""
def __init__(self, tname):
if not type(tname) is str:
logger.error("Unable to instanciate, bad argument...")
raise TypeError('Excepted a string not a '+str(type(tname)))
self.tname = tname
self.table = self.Table()
pass
def Table(self):
self.table = sql.Table(self.tname, sql.MetaData(), autoload_with=SqlWrapper.rengine, autoload=True)
return self.table
@property
def col(self):
return self.table.c
@property
def sel(self):
return sql.select([self.table])
@property
def where(self):
return self.sel.where
@property
def join(self):
return self.sel.join
@property
def rconn(self):
return SqlWrapper.rc()
@property
def wconn(self):
return SqlWrapper.wc()
def sFetchAll(self, sel):
return self.rexec(sel).fetchall()
def rexec(self, o):
return self.rconn.execute(o)
def wexec(self, o):
return self.wconn.execute(o)

View file

@ -0,0 +1,85 @@
# -*- coding: utf-8 -*-
import os
import logging as logger
import sqlalchemy as sql
from Database.sqlwrapper import SqlWrapper
class SqlQueryBuilder():
def __init__(self, sqlwrapper, table):
if not type(sqlwrapper) is SqlWrapper:
logger.error("Unable to instanciate, bad argument...")
raise TypeError('Excepted a SqlWrapper not a '+str(type(sqlwrapper)))
self.table = table
self.sqlwrapper = sqlwrapper
self.proxy = None
def Select(self, arg):
""" Alias for select clause
@param arg iterable: arg must be a Python list or other iterable and contain eather table name/type or colum/literal_column
"""
self.proxy = sql.select(arg)
return self.proxy
def Where(self, arg):
""" Alias for where clause
@param arg SQL expression object or string
"""
self.proxy = self.proxy.where(arg)
def From(self, arg):
""" Alias for select_from clause
@param arg Table or table('tablename') or join clause
"""
self.proxy = self.proxy.select_from(arg)
def Update(self):
self.proxy = self.table.update()
def Insert(self):
self.proxy = self.table.insert()
def Delete(self):
self.proxy = self.proxy.delete()
def Value(self, arg):
"""
Allow you to specifies the VALUES or SET clause of the statement.
@param arg: VALUES or SET clause
"""
self.proxy = self.proxy.values(arg)
def Execute(self, bindedparam):
"""
Execute the sql query constructed in the proxy and return the result.
If no query then return False.
@return: query result on success else False
"""
if(self.proxy.__str__().split() == 'SELECT'):
if('bindparam' in self.proxy.__str__()):
#on test separement la présence de la clause bindparam et le type de l'argument correspondant
#car si la clause est présente mais que l'argument est defectueux on doit renvoyer False et non pas executer la requete
if(type(bindedparam) is list and type(bindedparam[0]) is dict):
return self.sqlwrapper.rconn.execute(self.proxy, bindedparam)
else:
return False
else:
return self.sqlwrapper.rconn.execute(self.proxy)
elif(self.proxy is not None):
if('bindparam' in self.proxy.__str__()):
if(type(bindedparam) is list and type(bindedparam[0]) is dict):
return self.sqlwrapper.wconn.execute(self.proxy, bindedparam)
else:
return False
else:
return self.sqlwrapper.wconn.execute(self.proxy)
else:
return False