@@ -204,32 +204,21 @@ def _execute_many(self, cursor: "SpannerConnection", statement: "SQL") -> Execut
204204 raise SQLConversionError (msg )
205205 conn = cast ("Any" , cursor )
206206
207- parameter_sets = statement .parameters if isinstance (statement .parameters , list ) else []
208- if not parameter_sets :
207+ sql , prepared_parameters = self ._get_compiled_sql (statement , self .statement_config )
208+
209+ if not prepared_parameters or not isinstance (prepared_parameters , list ):
209210 msg = "execute_many requires at least one parameter set"
210211 raise SQLConversionError (msg )
211212
212- base_params = parameter_sets [0 ]
213- base_statement = self .prepare_statement (
214- statement .raw_sql , * [base_params ], statement_config = statement .statement_config
215- )
216- compiled_sql , _ = self ._get_compiled_sql (base_statement , self .statement_config )
217-
218- batch_inputs : list [dict [str , Any ]] = []
219- for params in parameter_sets :
220- per_statement = self .prepare_statement (
221- statement .raw_sql , * [params ], statement_config = statement .statement_config
222- )
223- _ , processed_params = self ._get_compiled_sql (per_statement , self .statement_config )
224- coerced_params = self ._coerce_params (processed_params )
213+ batch_args : list [tuple [str , dict [str , Any ] | None , dict [str , Any ]]] = []
214+ for params in prepared_parameters :
215+ coerced_params = self ._coerce_params (params )
225216 if coerced_params is None :
226217 coerced_params = {}
227- batch_inputs .append (coerced_params )
228-
229- batch_args = [(compiled_sql , p , self ._infer_param_types (p )) for p in batch_inputs ]
218+ batch_args .append ((sql , coerced_params , self ._infer_param_types (coerced_params )))
230219
231- row_counts = conn .batch_update (batch_args )
232- total_rows = int ( sum (int ( count ) for count in row_counts ))
220+ _status , row_counts = conn .batch_update (batch_args )
221+ total_rows = sum (row_counts ) if row_counts else 0
233222
234223 return self .create_execution_result (cursor , rowcount_override = total_rows , is_many_result = True )
235224
@@ -350,28 +339,28 @@ def _truncate_table_sync(self, table: str) -> None:
350339
351340
352341def _build_spanner_profile () -> DriverParameterProfile :
353- type_coercions : dict [type , Any ] = {dict : to_json , list : to_json , tuple : to_json }
342+ type_coercions : dict [type , Any ] = {dict : to_json }
354343 return DriverParameterProfile (
355344 name = "Spanner" ,
356345 default_style = ParameterStyle .NAMED_AT ,
357346 supported_styles = {ParameterStyle .NAMED_AT },
358347 default_execution_style = ParameterStyle .NAMED_AT ,
359348 supported_execution_styles = {ParameterStyle .NAMED_AT },
360349 has_native_list_expansion = True ,
361- json_serializer_strategy = "helper " ,
350+ json_serializer_strategy = "none " ,
362351 default_dialect = "spanner" ,
363352 preserve_parameter_format = True ,
364353 needs_static_script_compilation = False ,
365354 allow_mixed_parameter_styles = False ,
366355 preserve_original_params_for_many = True ,
367356 custom_type_coercions = type_coercions ,
368- extras = {"type_coercion_overrides" : type_coercions },
357+ extras = {},
369358 )
370359
371360
372361_SPANNER_PROFILE = _build_spanner_profile ()
373362register_driver_profile ("spanner" , _SPANNER_PROFILE )
374363
375364spanner_statement_config = build_statement_config_from_profile (
376- _SPANNER_PROFILE , statement_overrides = {"dialect" : "spanner" }, json_serializer = to_json
365+ _SPANNER_PROFILE , statement_overrides = {"dialect" : "spanner" }
377366)
0 commit comments