def _get_crud_params(compiler, stmt, **kw):

    compiler.postfetch = []
    compiler.prefetch = []
    compiler.returning = []

    # no parameters in the statement, no parameters in the
    # compiled params - return binds for all columns
    if compiler.column_keys is None and stmt.parameters is None:
        return [
            (c, _create_bind_param(
                compiler, c, None, required=True))
            for c in stmt.table.columns
        ]

    if stmt._has_multi_parameters:
        stmt_parameters = stmt.parameters[0]
    else:
        stmt_parameters = stmt.parameters

    # getters - these are normally just column.key,
    # but in the case of mysql multi-table update, the rules for
    # .key must conditionally take tablename into account
    _column_as_key, _getattr_col_key, _col_bind_name = \
        _key_getters_for_crud_column(compiler, stmt)

    # if we have statement parameters - set defaults in the
    # compiled params
    if compiler.column_keys is None:
        parameters = {}
    else:
        parameters = dict((_column_as_key(key), REQUIRED)
                          for key in compiler.column_keys
                          if not stmt_parameters or
                          key not in stmt_parameters)

    # create a list of column assignment clauses as tuples
    values = []

    if stmt_parameters is not None:
        _get_stmt_parameters_params(
            compiler,
            parameters, stmt_parameters, _column_as_key, values, kw)

    check_columns = {}

    # special logic that only occurs for multi-table UPDATE
    # statements
    if compiler.isupdate and stmt._extra_froms and stmt_parameters:
        _get_multitable_params(
            compiler, stmt, stmt_parameters, check_columns,
            _col_bind_name, _getattr_col_key, values, kw)

    if compiler.isinsert and stmt.select_names:
        _scan_insert_from_select_cols(
            compiler, stmt, parameters,
            _getattr_col_key, _column_as_key,
            _col_bind_name, check_columns, values, kw)
    else:
        _scan_cols(
            compiler, stmt, parameters,
            _getattr_col_key, _column_as_key,
            _col_bind_name, check_columns, values, kw)

    if parameters and stmt_parameters:
        check = set(parameters).intersection(
            _column_as_key(k) for k in stmt_parameters
        ).difference(check_columns)
        if check:
            raise exc.CompileError(
                "Unconsumed column names: %s" %
                (", ".join("%s" % c for c in check))
            )

    if stmt._has_multi_parameters:
        values = _extend_values_for_multiparams(compiler, stmt, values, kw)

    return values
Store the openid request information in the session.
dataset/ETHPy150Open zzzeek/sqlalchemy/lib/sqlalchemy/sql/crud.py/_get_crud_params--crossover with--dataset/ETHPy150Open necaris/python3-openid/examples/djopenid/server/views.py/setRequest