1
- """ DIRAC Basic MySQL Class
2
- It provides access to the basic MySQL methods in a multithread-safe mode
3
- keeping used connections in a python Queue for further reuse.
1
+ """DIRAC Basic MySQL Class
2
+ It provides access to the basic MySQL methods in a multithread-safe mode
3
+ keeping used connections in a python Queue for further reuse.
4
4
5
- These are the coded methods:
5
+ These are the coded methods:
6
6
7
7
8
- __init__( host, user, passwd, name, [maxConnsInQueue=10] )
8
+ __init__( host, user, passwd, name, [maxConnsInQueue=10] )
9
9
10
- Initializes the Queue and tries to connect to the DB server,
11
- using the _connect method.
12
- "maxConnsInQueue" defines the size of the Queue of open connections
13
- that are kept for reuse. It also defined the maximum number of open
14
- connections available from the object.
15
- maxConnsInQueue = 0 means unlimited and it is not supported.
10
+ Initializes the Queue and tries to connect to the DB server,
11
+ using the _connect method.
12
+ "maxConnsInQueue" defines the size of the Queue of open connections
13
+ that are kept for reuse. It also defined the maximum number of open
14
+ connections available from the object.
15
+ maxConnsInQueue = 0 means unlimited and it is not supported.
16
16
17
17
18
- _except( methodName, exception, errorMessage )
18
+ _except( methodName, exception, errorMessage )
19
19
20
- Helper method for exceptions: the "methodName" and the "errorMessage"
21
- are printed with ERROR level, then the "exception" is printed (with
22
- full description if it is a MySQL Exception) and S_ERROR is returned
23
- with the errorMessage and the exception.
20
+ Helper method for exceptions: the "methodName" and the "errorMessage"
21
+ are printed with ERROR level, then the "exception" is printed (with
22
+ full description if it is a MySQL Exception) and S_ERROR is returned
23
+ with the errorMessage and the exception.
24
24
25
25
26
- _connect()
26
+ _connect()
27
27
28
- Attempts connection to DB and sets the _connected flag to True upon success.
29
- Returns S_OK or S_ERROR.
28
+ Attempts connection to DB and sets the _connected flag to True upon success.
29
+ Returns S_OK or S_ERROR.
30
30
31
31
32
- _query( cmd, [conn=conn] )
32
+ _query( cmd, [conn=conn] )
33
33
34
- Executes SQL command "cmd".
35
- Gets a connection from the Queue (or open a new one if none is available),
36
- the used connection is back into the Queue.
37
- If a connection to the the DB is passed as second argument this connection
38
- is used and is not in the Queue.
39
- Returns S_OK with fetchall() out in Value or S_ERROR upon failure.
34
+ Executes SQL command "cmd".
35
+ Gets a connection from the Queue (or open a new one if none is available),
36
+ the used connection is back into the Queue.
37
+ If a connection to the the DB is passed as second argument this connection
38
+ is used and is not in the Queue.
39
+ Returns S_OK with fetchall() out in Value or S_ERROR upon failure.
40
40
41
41
42
- _update( cmd, [conn=conn] )
42
+ _update( cmd, [conn=conn] )
43
43
44
- Executes SQL command "cmd" and issue a commit
45
- Gets a connection from the Queue (or open a new one if none is available),
46
- the used connection is back into the Queue.
47
- If a connection to the the DB is passed as second argument this connection
48
- is used and is not in the Queue
49
- Returns S_OK with number of updated registers in Value or S_ERROR upon failure.
44
+ Executes SQL command "cmd" and issue a commit
45
+ Gets a connection from the Queue (or open a new one if none is available),
46
+ the used connection is back into the Queue.
47
+ If a connection to the the DB is passed as second argument this connection
48
+ is used and is not in the Queue
49
+ Returns S_OK with number of updated registers in Value or S_ERROR upon failure.
50
50
51
51
52
- _createTables( tableDict )
52
+ _createTables( tableDict )
53
53
54
- Create a new Table in the DB
54
+ Create a new Table in the DB
55
55
56
56
57
- _getConnection()
57
+ _getConnection()
58
58
59
- Gets a connection from the Queue (or open a new one if none is available)
60
- Returns S_OK with connection in Value or S_ERROR
61
- the calling method is responsible for closing this connection once it is no
62
- longer needed.
59
+ Gets a connection from the Queue (or open a new one if none is available)
60
+ Returns S_OK with connection in Value or S_ERROR
61
+ the calling method is responsible for closing this connection once it is no
62
+ longer needed.
63
63
64
64
65
65
66
66
67
- Some high level methods have been added to avoid the need to write SQL
68
- statement in most common cases. They should be used instead of low level
69
- _insert, _update methods when ever possible.
67
+ Some high level methods have been added to avoid the need to write SQL
68
+ statement in most common cases. They should be used instead of low level
69
+ _insert, _update methods when ever possible.
70
70
71
- buildCondition( self, condDict = None, older = None, newer = None,
72
- timeStamp = None, orderAttribute = None, limit = False,
73
- greater = None, smaller = None ):
71
+ buildCondition( self, condDict = None, older = None, newer = None,
72
+ timeStamp = None, orderAttribute = None, limit = False,
73
+ greater = None, smaller = None ):
74
74
75
- Build SQL condition statement from provided condDict and other extra check on
76
- a specified time stamp.
77
- The conditions dictionary specifies for each attribute one or a List of possible
78
- values
79
- greater and smaller are dictionaries in which the keys are the names of the fields,
80
- that are requested to be >= or < than the corresponding value.
81
- For compatibility with current usage it uses Exceptions to exit in case of
82
- invalid arguments
75
+ Build SQL condition statement from provided condDict and other extra check on
76
+ a specified time stamp.
77
+ The conditions dictionary specifies for each attribute one or a List of possible
78
+ values
79
+ greater and smaller are dictionaries in which the keys are the names of the fields,
80
+ that are requested to be >= or < than the corresponding value.
81
+ For compatibility with current usage it uses Exceptions to exit in case of
82
+ invalid arguments
83
83
84
84
85
- insertFields( self, tableName, inFields = None, inValues = None, conn = None, inDict = None ):
85
+ insertFields( self, tableName, inFields = None, inValues = None, conn = None, inDict = None ):
86
86
87
- Insert a new row in "tableName" assigning the values "inValues" to the
88
- fields "inFields".
89
- Alternatively inDict can be used
90
- String type values will be appropriately escaped.
87
+ Insert a new row in "tableName" assigning the values "inValues" to the
88
+ fields "inFields".
89
+ Alternatively inDict can be used
90
+ String type values will be appropriately escaped.
91
91
92
92
93
- updateFields( self, tableName, updateFields = None, updateValues = None,
94
- condDict = None,
95
- limit = False, conn = None,
96
- updateDict = None,
97
- older = None, newer = None,
98
- timeStamp = None, orderAttribute = None ):
93
+ updateFields( self, tableName, updateFields = None, updateValues = None,
94
+ condDict = None,
95
+ limit = False, conn = None,
96
+ updateDict = None,
97
+ older = None, newer = None,
98
+ timeStamp = None, orderAttribute = None ):
99
99
100
- Update "updateFields" from "tableName" with "updateValues".
101
- updateDict alternative way to provide the updateFields and updateValues
102
- N records can match the condition
103
- return S_OK( number of updated rows )
104
- if limit is not False, the given limit is set
105
- String type values will be appropriately escaped.
100
+ Update "updateFields" from "tableName" with "updateValues".
101
+ updateDict alternative way to provide the updateFields and updateValues
102
+ N records can match the condition
103
+ return S_OK( number of updated rows )
104
+ if limit is not False, the given limit is set
105
+ String type values will be appropriately escaped.
106
106
107
107
108
- deleteEntries( self, tableName,
109
- condDict = None,
110
- limit = False, conn = None,
111
- older = None, newer = None,
112
- timeStamp = None, orderAttribute = None ):
113
-
114
- Delete rows from "tableName" with
115
- N records can match the condition
116
- if limit is not False, the given limit is set
117
- String type values will be appropriately escaped, they can be single values or lists of values.
118
-
119
-
120
- getFields( self, tableName, outFields = None,
108
+ deleteEntries( self, tableName,
121
109
condDict = None,
122
110
limit = False, conn = None,
123
111
older = None, newer = None,
124
112
timeStamp = None, orderAttribute = None ):
125
113
126
- Select "outFields" from "tableName" with condDict
127
- N records can match the condition
128
- return S_OK( tuple(Field,Value) )
129
- if limit is not False, the given limit is set
130
- String type values will be appropriately escaped, they can be single values or lists of values.
114
+ Delete rows from "tableName" with
115
+ N records can match the condition
116
+ if limit is not False, the given limit is set
117
+ String type values will be appropriately escaped, they can be single values or lists of values.
118
+
119
+
120
+ getFields( self, tableName, outFields = None,
121
+ condDict = None,
122
+ limit = False, conn = None,
123
+ older = None, newer = None,
124
+ timeStamp = None, orderAttribute = None ):
131
125
132
- for compatibility with other methods condDict keyed argument is added
126
+ Select "outFields" from "tableName" with condDict
127
+ N records can match the condition
128
+ return S_OK( tuple(Field,Value) )
129
+ if limit is not False, the given limit is set
130
+ String type values will be appropriately escaped, they can be single values or lists of values.
133
131
132
+ for compatibility with other methods condDict keyed argument is added
134
133
135
- getCounters( self, table, attrList, condDict = None, older = None,
136
- newer = None, timeStamp = None, connection = False ):
137
134
138
- Count the number of records on each distinct combination of AttrList, selected
139
- with condition defined by condDict and time stamps
135
+ getCounters( self, table, attrList, condDict = None, older = None,
136
+ newer = None, timeStamp = None, connection = False ):
140
137
138
+ Count the number of records on each distinct combination of AttrList, selected
139
+ with condition defined by condDict and time stamps
141
140
142
- getDistinctAttributeValues( self, table, attribute, condDict = None, older = None,
143
- newer = None, timeStamp = None, connection = False ):
144
141
145
- Get distinct values of a table attribute under specified conditions
142
+ getDistinctAttributeValues( self, table, attribute, condDict = None, older = None,
143
+ newer = None, timeStamp = None, connection = False ):
144
+
145
+ Get distinct values of a table attribute under specified conditions
146
146
147
147
148
148
"""
149
+
149
150
import collections
150
151
import functools
151
152
import json
@@ -760,6 +761,7 @@ def _update(self, cmd, *, args=None, conn=None, debug=True):
760
761
761
762
:return: S_OK with number of updated registers upon success.
762
763
S_ERROR upon error.
764
+ lastRowId: if set, added to the returned dictionary
763
765
"""
764
766
765
767
self .log .debug (f"_update: { self ._safeCmd (cmd )} " )
@@ -774,9 +776,11 @@ def _update(self, cmd, *, args=None, conn=None, debug=True):
774
776
try :
775
777
cursor = connection .cursor ()
776
778
res = cursor .execute (cmd , args = args )
779
+
777
780
retDict = S_OK (res )
778
781
if cursor .lastrowid :
779
782
retDict ["lastRowId" ] = cursor .lastrowid
783
+
780
784
except Exception as x :
781
785
retDict = self ._except ("_update" , x , "Execution failed." , cmd , debug )
782
786
0 commit comments