nodes: 0, module; 1, function_definition; 2, function_name:NamedPlaceholders; 3, parameters; 4, block; 5, identifier:iterable; 6, expression_statement; 7, expression_statement; 8, return_statement; 9, comment:"""Returns named placeholders from all elements of the given iterable.
  
    Use this function for VALUES of MySQL INSERTs.
  
    To account for Iterables with undefined order (dicts before Python 3.6),
    this function sorts column names.
  
    Examples:
      >>> NamedPlaceholders({"password": "foo", "name": "bar"})
      u'(%(name)s, %(password)s)'
  
    Args:
      iterable: The iterable of strings to be used as placeholder keys.
  
    Returns:
      A string containing a tuple of comma-separated, sorted, named, placeholders.
    """; 10, assignment; 11, call; 12, identifier:placeholders; 13, call; 14, attribute; 15, argument_list; 16, attribute; 17, generator_expression; 18, string:"({})"; 19, identifier:format; 20, identifier:placeholders; 21, string:", "; 22, identifier:join; 23, call; 24, for_in_clause; 25, attribute; 26, argument_list; 27, identifier:key; 28, call; 29, string:"%({})s"; 30, identifier:format; 31, identifier:key; 32, identifier:sorted; 33, argument_list; 34, identifier:iterable
code: def NamedPlaceholders(iterable):
    """Returns named placeholders from all elements of the given iterable.
  
    Use this function for VALUES of MySQL INSERTs.
  
    To account for Iterables with undefined order (dicts before Python 3.6),
    this function sorts column names.
  
    Examples:
      >>> NamedPlaceholders({"password": "foo", "name": "bar"})
      u'(%(name)s, %(password)s)'
  
    Args:
      iterable: The iterable of strings to be used as placeholder keys.
  
    Returns:
      A string containing a tuple of comma-separated, sorted, named, placeholders.
    """
    placeholders = ", ".join("%({})s".format(key) for key in sorted(iterable))
    return "({})".format(placeholders)