code: def _make_params_pb(params, param_types):
          
          if params is not None:
              if param_types is None:
                  raise ValueError("Specify 'param_types' when passing 'params'.")
              return Struct(
                  fields={key: _make_value_pb(value) for key, value in params.items()}
              )
          else:
              if param_types is not None:
                  raise ValueError("Specify 'params' when passing 'param_types'.")
  
          return None
docs: Helper for :meth:`execute_update`.
  
          :type params: dict, {str -> column value}
          :param params: values for parameter replacement.  Keys must match
                         the names used in ``dml``.
  
          :type param_types: dict[str -> Union[dict, .types.Type]]
          :param param_types:
              (Optional) maps explicit types for one or more param values;
              required if parameters are passed.
  
          :rtype: Union[None, :class:`Struct`]
          :returns: a struct message for the passed params, or None
          :raises ValueError:
              If ``param_types`` is None but ``params`` is not None.
          :raises ValueError:
              If ``params`` is None but ``param_types`` is not None.