@@ -429,8 +429,8 @@ def _deallocate_prepared_statement(self, statement_name: str) -> None:
429429 def _generate_unique_statement_name (self ):
430430 return 'st_' + uuid .uuid4 ().hex .replace ('-' , '' )
431431
432- def execute (self , operation , params = None ):
433- if params :
432+ def execute (self , operation , params = None , prepared_statements_client_side = True ):
433+ if params and not prepared_statements_client_side :
434434 assert isinstance (params , (list , tuple )), (
435435 'params must be a list or tuple containing the query '
436436 'parameter values'
@@ -454,6 +454,20 @@ def execute(self, operation, params=None):
454454 self ._deallocate_prepared_statement (statement_name )
455455
456456 else :
457+ if params :
458+ assert isinstance (params , (list , tuple )), (
459+ 'params must be a list or tuple containing the query '
460+ 'parameter values'
461+ )
462+
463+ # substitue parameters in query in reversed order
464+ question_mark_positions = [index for index , character in enumerate (operation ) if character == '?' ]
465+ question_mark_positions .reverse ()
466+ for index , value in enumerate (reversed (params )):
467+ operation = "" .join ([operation [:question_mark_positions [index ]],
468+ "'" , value , "'" ,
469+ operation [question_mark_positions [index ] + 1 :]])
470+
457471 self ._query = trino .client .TrinoQuery (self ._request , sql = operation ,
458472 experimental_python_types = self ._experimental_pyton_types )
459473 result = self ._query .execute ()
0 commit comments