@@ -215,62 +215,63 @@ def execute(self, sql, *args, **kwargs):
215215 # Join tokens into statement
216216 statement = "" .join ([str (token ) for token in tokens ])
217217
218- # Raise exceptions for warnings
219- warnings .filterwarnings ("error" )
220-
221- # Prepare, execute statement
222- try :
223-
224- # Execute statement
225- result = self .engine .execute (sqlalchemy .text (statement ))
218+ with warnings .catch_warnings ():
219+ warnings .simplefilter ("error" )
220+
221+ # Prepare, execute statement
222+ try :
223+
224+
225+ # Execute statement
226+ result = self .engine .execute (sqlalchemy .text (statement ))
227+
228+ # Return value
229+ ret = True
230+ if tokens [0 ].ttype == sqlparse .tokens .Keyword .DML :
231+
232+ # Uppercase token's value
233+ value = tokens [0 ].value .upper ()
234+
235+ # If SELECT, return result set as list of dict objects
236+ if value == "SELECT" :
237+
238+ # Coerce any decimal.Decimal objects to float objects
239+ # https://groups.google.com/d/msg/sqlalchemy/0qXMYJvq8SA/oqtvMD9Uw-kJ
240+ rows = [dict (row ) for row in result .fetchall ()]
241+ for row in rows :
242+ for column in row :
243+ if type (row [column ]) is decimal .Decimal :
244+ row [column ] = float (row [column ])
245+ ret = rows
246+
247+ # If INSERT, return primary key value for a newly inserted row
248+ elif value == "INSERT" :
249+ if self .engine .url .get_backend_name () in ["postgres" , "postgresql" ]:
250+ result = self .engine .execute ("SELECT LASTVAL()" )
251+ ret = result .first ()[0 ]
252+ else :
253+ ret = result .lastrowid
254+
255+ # If DELETE or UPDATE, return number of rows matched
256+ elif value in ["DELETE" , "UPDATE" ]:
257+ ret = result .rowcount
258+
259+ # If constraint violated, return None
260+ except sqlalchemy .exc .IntegrityError :
261+ self ._logger .debug (termcolor .colored (statement , "yellow" ))
262+ return None
263+
264+ # If user errror
265+ except sqlalchemy .exc .OperationalError as e :
266+ self ._logger .debug (termcolor .colored (statement , "red" ))
267+ e = RuntimeError (_parse_exception (e ))
268+ e .__cause__ = None
269+ raise e
226270
227271 # Return value
228- ret = True
229- if tokens [0 ].ttype == sqlparse .tokens .Keyword .DML :
230-
231- # Uppercase token's value
232- value = tokens [0 ].value .upper ()
233-
234- # If SELECT, return result set as list of dict objects
235- if value == "SELECT" :
236-
237- # Coerce any decimal.Decimal objects to float objects
238- # https://groups.google.com/d/msg/sqlalchemy/0qXMYJvq8SA/oqtvMD9Uw-kJ
239- rows = [dict (row ) for row in result .fetchall ()]
240- for row in rows :
241- for column in row :
242- if type (row [column ]) is decimal .Decimal :
243- row [column ] = float (row [column ])
244- ret = rows
245-
246- # If INSERT, return primary key value for a newly inserted row
247- elif value == "INSERT" :
248- if self .engine .url .get_backend_name () in ["postgres" , "postgresql" ]:
249- result = self .engine .execute ("SELECT LASTVAL()" )
250- ret = result .first ()[0 ]
251- else :
252- ret = result .lastrowid
253-
254- # If DELETE or UPDATE, return number of rows matched
255- elif value in ["DELETE" , "UPDATE" ]:
256- ret = result .rowcount
257-
258- # If constraint violated, return None
259- except sqlalchemy .exc .IntegrityError :
260- self ._logger .debug (termcolor .colored (statement , "yellow" ))
261- return None
262-
263- # If user errror
264- except sqlalchemy .exc .OperationalError as e :
265- self ._logger .debug (termcolor .colored (statement , "red" ))
266- e = RuntimeError (_parse_exception (e ))
267- e .__cause__ = None
268- raise e
269-
270- # Return value
271- else :
272- self ._logger .debug (termcolor .colored (statement , "green" ))
273- return ret
272+ else :
273+ self ._logger .debug (termcolor .colored (statement , "green" ))
274+ return ret
274275
275276 def _escape (self , value ):
276277 """
0 commit comments