Browse Source

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

Yann Weber 9 years ago
parent
commit
2af27292c7
2 changed files with 85 additions and 73 deletions
  1. 0
    73
      Database/sqlobject.py
  2. 85
    0
      Database/sqlquerybuilder.py

+ 0
- 73
Database/sqlobject.py View File

@@ -1,73 +0,0 @@
1
-# -*- coding: utf-8 -*-
2
-
3
-import os
4
-import logging as logger
5
-
6
-import sqlalchemy as sql
7
-
8
-from Database.sqlwrapper import SqlWrapper
9
-
10
-class SqlObject(object):
11
-    """ Object that make aliases with sqlalchemy
12
-        
13
-        Example usage of object that inherite from SqlObject :
14
-        
15
-        class foo(SlqObject,...):
16
-            def __init__(self, ...):
17
-                self.__class__.tname = 'foo_table'
18
-
19
-        f = foo(...)
20
-        req = f.where(f.col.id == 42)
21
-        res = f.rexec(req)
22
-
23
-        e = bar(...)
24
-        req = f.join(e.col.id == f.col.id)
25
-        res = f.rexec(req)
26
-
27
-    """
28
-
29
-    def __init__(self, tname):
30
-        if not type(tname) is str:
31
-            logger.error("Unable to instanciate, bad argument...")
32
-            raise TypeError('Excepted a string not a '+str(type(tname)))
33
-
34
-        self.tname = tname
35
-        self.table = self.Table()
36
-        pass
37
-
38
-    def Table(self):
39
-        self.table = sql.Table(self.tname, sql.MetaData(), autoload_with=SqlWrapper.rengine, autoload=True)
40
-        return self.table
41
-
42
-    @property
43
-    def col(self):
44
-        return self.table.c
45
-    
46
-    @property
47
-    def sel(self):
48
-        return sql.select([self.table])
49
-
50
-    @property
51
-    def where(self):
52
-        return self.sel.where
53
-
54
-    @property
55
-    def join(self):
56
-        return self.sel.join
57
-
58
-    @property
59
-    def rconn(self):
60
-        return SqlWrapper.rc()
61
-
62
-    @property
63
-    def wconn(self):
64
-        return SqlWrapper.wc()
65
-
66
-    def sFetchAll(self, sel):
67
-        return self.rexec(sel).fetchall()
68
-
69
-    def rexec(self, o):
70
-        return self.rconn.execute(o)
71
-
72
-    def wexec(self, o):
73
-        return self.wconn.execute(o)

+ 85
- 0
Database/sqlquerybuilder.py View File

@@ -0,0 +1,85 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+import os
4
+import logging as logger
5
+
6
+import sqlalchemy as sql
7
+
8
+from Database.sqlwrapper import SqlWrapper
9
+
10
+class SqlQueryBuilder():
11
+
12
+    def __init__(self, sqlwrapper, table):
13
+        if not type(sqlwrapper) is SqlWrapper:
14
+             logger.error("Unable to instanciate, bad argument...")
15
+             raise TypeError('Excepted a SqlWrapper not a '+str(type(sqlwrapper)))
16
+        self.table = table
17
+        self.sqlwrapper = sqlwrapper
18
+        self.proxy = None
19
+
20
+
21
+    def Select(self, arg):
22
+        """ Alias for select clause
23
+            @param arg iterable: arg must be a Python list or other iterable and contain eather table name/type or colum/literal_column
24
+        """
25
+
26
+        self.proxy = sql.select(arg)
27
+        return self.proxy
28
+
29
+    def Where(self, arg):
30
+        """ Alias for where clause
31
+            @param arg SQL expression object or string
32
+        """
33
+        self.proxy = self.proxy.where(arg)
34
+
35
+    def From(self, arg):
36
+        """ Alias for select_from clause
37
+            @param arg Table or table('tablename') or join clause
38
+        """
39
+        self.proxy = self.proxy.select_from(arg)
40
+
41
+    def Update(self):
42
+        self.proxy = self.table.update()
43
+
44
+    def Insert(self):
45
+        self.proxy = self.table.insert()
46
+
47
+    def Delete(self):
48
+        self.proxy = self.proxy.delete()
49
+
50
+    def Value(self, arg):
51
+        """
52
+        Allow you to specifies the VALUES or SET clause of the statement.
53
+        @param arg: VALUES or SET clause
54
+        """
55
+        self.proxy = self.proxy.values(arg)
56
+
57
+    def Execute(self, bindedparam):
58
+        """
59
+        Execute the sql query constructed in the proxy and return the result.
60
+        If no query then return False.
61
+        @return: query result on success else False
62
+        """
63
+        if(self.proxy.__str__().split() == 'SELECT'):
64
+            if('bindparam' in self.proxy.__str__()):
65
+                #on test separement la présence de la clause bindparam et le type de l'argument correspondant
66
+                #car si la clause est présente mais que l'argument est defectueux on doit renvoyer False et non pas executer la requete
67
+                if(type(bindedparam) is list and type(bindedparam[0]) is dict):
68
+                    return self.sqlwrapper.rconn.execute(self.proxy, bindedparam)
69
+                else:
70
+                    return False
71
+            else:
72
+                return self.sqlwrapper.rconn.execute(self.proxy)
73
+        elif(self.proxy is not None):
74
+            if('bindparam' in self.proxy.__str__()):
75
+                if(type(bindedparam) is list and type(bindedparam[0]) is dict):
76
+                    return self.sqlwrapper.wconn.execute(self.proxy, bindedparam)
77
+                else:
78
+                    return False
79
+            else:
80
+                return self.sqlwrapper.wconn.execute(self.proxy)
81
+        else:
82
+            return False
83
+
84
+
85
+

Loading…
Cancel
Save