コード例 #1
0
ファイル: query.py プロジェクト: ryuzou/Alva_Server
def named_tuple_factory(colnames, rows):
    """
    Returns each row as a `namedtuple <https://docs.python.org/2/library/collections.html#collections.namedtuple>`_.
    This is the default row factory.

    Example::

        >>> from cassandra.query import named_tuple_factory
        >>> session = cluster.connect('mykeyspace')
        >>> session.row_factory = named_tuple_factory
        >>> rows = session.execute("SELECT name, age FROM users LIMIT 1")
        >>> user = rows[0]

        >>> # you can access field by their name:
        >>> print "name: %s, age: %d" % (user.name, user.age)
        name: Bob, age: 42

        >>> # or you can access fields by their position (like a tuple)
        >>> name, age = user
        >>> print "name: %s, age: %d" % (name, age)
        name: Bob, age: 42
        >>> name = user[0]
        >>> age = user[1]
        >>> print "name: %s, age: %d" % (name, age)
        name: Bob, age: 42

    .. versionchanged:: 2.0.0
        moved from ``cassandra.decoder`` to ``cassandra.query``
    """
    clean_column_names = map(_clean_column_name, colnames)
    try:
        Row = namedtuple('Row', clean_column_names)
    except SyntaxError:
        warnings.warn(
            "Failed creating namedtuple for a result because there were too "
            "many columns. This is due to a Python limitation that affects "
            "namedtuple in Python 3.0-3.6 (see issue18896). The row will be "
            "created with {substitute_factory_name}, which lacks some namedtuple "
            "features and is slower. To avoid slower performance accessing "
            "values on row objects, Upgrade to Python 3.7, or use a different "
            "row factory. (column names: {colnames})".format(
                substitute_factory_name=pseudo_namedtuple_factory.__name__,
                colnames=colnames))
        return pseudo_namedtuple_factory(colnames, rows)
    except Exception:
        clean_column_names = list(
            map(_clean_column_name, colnames)
        )  # create list because py3 map object will be consumed by first attempt
        log.warning(
            "Failed creating named tuple for results with column names %s (cleaned: %s) "
            "(see Python 'namedtuple' documentation for details on name rules). "
            "Results will be returned with positional names. "
            "Avoid this by choosing different names, using SELECT \"<col name>\" AS aliases, "
            "or specifying a different row_factory on your Session" %
            (colnames, clean_column_names))
        Row = namedtuple('Row', _sanitize_identifiers(clean_column_names))

    return [Row(*row) for row in rows]
コード例 #2
0
ファイル: query.py プロジェクト: datastax/python-driver
def named_tuple_factory(colnames, rows):
    """
    Returns each row as a `namedtuple <https://docs.python.org/2/library/collections.html#collections.namedtuple>`_.
    This is the default row factory.

    Example::

        >>> from cassandra.query import named_tuple_factory
        >>> session = cluster.connect('mykeyspace')
        >>> session.row_factory = named_tuple_factory
        >>> rows = session.execute("SELECT name, age FROM users LIMIT 1")
        >>> user = rows[0]

        >>> # you can access field by their name:
        >>> print "name: %s, age: %d" % (user.name, user.age)
        name: Bob, age: 42

        >>> # or you can access fields by their position (like a tuple)
        >>> name, age = user
        >>> print "name: %s, age: %d" % (name, age)
        name: Bob, age: 42
        >>> name = user[0]
        >>> age = user[1]
        >>> print "name: %s, age: %d" % (name, age)
        name: Bob, age: 42

    .. versionchanged:: 2.0.0
        moved from ``cassandra.decoder`` to ``cassandra.query``
    """
    clean_column_names = map(_clean_column_name, colnames)
    try:
        Row = namedtuple('Row', clean_column_names)
    except SyntaxError:
        warnings.warn(
            "Failed creating namedtuple for a result because there were too "
            "many columns. This is due to a Python limitation that affects "
            "namedtuple in Python 3.0-3.6 (see issue18896). The row will be "
            "created with {substitute_factory_name}, which lacks some namedtuple "
            "features and is slower. To avoid slower performance accessing "
            "values on row objects, Upgrade to Python 3.7, or use a different "
            "row factory. (column names: {colnames})".format(
                substitute_factory_name=pseudo_namedtuple_factory.__name__,
                colnames=colnames
            )
        )
        return pseudo_namedtuple_factory(colnames, rows)
    except Exception:
        clean_column_names = list(map(_clean_column_name, colnames))  # create list because py3 map object will be consumed by first attempt
        log.warning("Failed creating named tuple for results with column names %s (cleaned: %s) "
                    "(see Python 'namedtuple' documentation for details on name rules). "
                    "Results will be returned with positional names. "
                    "Avoid this by choosing different names, using SELECT \"<col name>\" AS aliases, "
                    "or specifying a different row_factory on your Session" %
                    (colnames, clean_column_names))
        Row = namedtuple('Row', _sanitize_identifiers(clean_column_names))

    return [Row(*row) for row in rows]
コード例 #3
0
ファイル: query.py プロジェクト: rmatam/python-driver
def named_tuple_factory(colnames, rows):
    """
    Returns each row as a `namedtuple <https://docs.python.org/2/library/collections.html#collections.namedtuple>`_.
    This is the default row factory.

    Example::

        >>> from cassandra.query import named_tuple_factory
        >>> session = cluster.connect('mykeyspace')
        >>> session.row_factory = named_tuple_factory
        >>> rows = session.execute("SELECT name, age FROM users LIMIT 1")
        >>> user = rows[0]

        >>> # you can access field by their name:
        >>> print "name: %s, age: %d" % (user.name, user.age)
        name: Bob, age: 42

        >>> # or you can access fields by their position (like a tuple)
        >>> name, age = user
        >>> print "name: %s, age: %d" % (name, age)
        name: Bob, age: 42
        >>> name = user[0]
        >>> age = user[1]
        >>> print "name: %s, age: %d" % (name, age)
        name: Bob, age: 42

    .. versionchanged:: 2.0.0
        moved from ``cassandra.decoder`` to ``cassandra.query``
    """
    clean_column_names = map(_clean_column_name, colnames)
    try:
        Row = namedtuple('Row', clean_column_names)
    except Exception:
        clean_column_names = list(
            map(_clean_column_name, colnames)
        )  # create list because py3 map object will be consumed by first attempt
        log.warning(
            "Failed creating named tuple for results with column names %s (cleaned: %s) "
            "(see Python 'namedtuple' documentation for details on name rules). "
            "Results will be returned with positional names. "
            "Avoid this by choosing different names, using SELECT \"<col name>\" AS aliases, "
            "or specifying a different row_factory on your Session" %
            (colnames, clean_column_names))
        Row = namedtuple('Row', _sanitize_identifiers(clean_column_names))

    return [Row(*row) for row in rows]
コード例 #4
0
ファイル: query.py プロジェクト: LutzSteinborn/python-driver
def named_tuple_factory(colnames, rows):
    """
    Returns each row as a `namedtuple <https://docs.python.org/2/library/collections.html#collections.namedtuple>`_.
    This is the default row factory.

    Example::

        >>> from cassandra.query import named_tuple_factory
        >>> session = cluster.connect('mykeyspace')
        >>> session.row_factory = named_tuple_factory
        >>> rows = session.execute("SELECT name, age FROM users LIMIT 1")
        >>> user = rows[0]

        >>> # you can access field by their name:
        >>> print "name: %s, age: %d" % (user.name, user.age)
        name: Bob, age: 42

        >>> # or you can access fields by their position (like a tuple)
        >>> name, age = user
        >>> print "name: %s, age: %d" % (name, age)
        name: Bob, age: 42
        >>> name = user[0]
        >>> age = user[1]
        >>> print "name: %s, age: %d" % (name, age)
        name: Bob, age: 42

    .. versionchanged:: 2.0.0
        moved from ``cassandra.decoder`` to ``cassandra.query``
    """
    clean_column_names = map(_clean_column_name, colnames)
    try:
        Row = namedtuple('Row', clean_column_names)
    except Exception:
        clean_column_names = list(map(_clean_column_name, colnames))  # create list because py3 map object will be consumed by first attempt
        log.warning("Failed creating named tuple for results with column names %s (cleaned: %s) "
                    "(see Python 'namedtuple' documentation for details on name rules). "
                    "Results will be returned with positional names. "
                    "Avoid this by choosing different names, using SELECT \"<col name>\" AS aliases, "
                    "or specifying a different row_factory on your Session" %
                    (colnames, clean_column_names))
        Row = namedtuple('Row', _sanitize_identifiers(clean_column_names))

    return [Row(*row) for row in rows]