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:
commit
2af27292c7
2 changed files with 85 additions and 73 deletions
|
|
@ -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)
|
||||
85
Database/sqlquerybuilder.py
Normal file
85
Database/sqlquerybuilder.py
Normal 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
|
||||
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue