예제 #1
0
async def execute(query,
                  params=None,
                  consistency_level=None,
                  timeout=conn.NOT_SET,
                  connection=None):
    """执行 cassandra 操作"""

    _connection = conn.get_connection(connection)

    if isinstance(query, SimpleStatement):
        pass  #
    elif isinstance(query, BaseCQLStatement):
        params = query.get_context()
        query = SimpleStatement(str(query),
                                consistency_level=consistency_level,
                                fetch_size=query.fetch_size)
    elif isinstance(query, str):
        query = SimpleStatement(query, consistency_level=consistency_level)

    # debug_query = conn.format_log_context(query.query_string,
    #                                       connection=connection)
    # print(debug_query)

    result = await _connection.session.execute_future(query,
                                                      params,
                                                      timeout=timeout)

    return result
예제 #2
0
async def execute(
    query,
    params=None,
    consistency_level=None,
    timeout=conn.NOT_SET,
    connection=None,
):
    """
    Based on cassandra.cqlengine.connection.execute
    """

    _connection = conn.get_connection(connection)

    if isinstance(query, SimpleStatement):
        pass  #
    elif isinstance(query, BaseCQLStatement):
        params = query.get_context()
        query = SimpleStatement(
            str(query),
            consistency_level=consistency_level,
            fetch_size=query.fetch_size,
        )
    elif isinstance(query, str):
        query = SimpleStatement(query, consistency_level=consistency_level)

    result = await _connection.session.execute_future(query,
                                                      params,
                                                      timeout=timeout)

    return result
예제 #3
0
    async def async_fetch(cls, fields, fetch_size, paging_state):
        """分页获取
        Todo: 验证 paging_state 是否合法
        :param fields: list
        :param fetch_size: int
        :param paging_state: str

        :return ResultSet, bytes
        """
        # 解析 paging_state 为合法 bytes 对象
        if paging_state is None:
            _paging_state = None
        else:
            _paging_state = base64.b64decode(paging_state.encode())

        # 构造 cql 语句
        _fields_str = ', '.join(fields)
        statement = SimpleStatement(
            f'SELECT {_fields_str} FROM {cls.column_family_name()}',
            fetch_size=fetch_size)
        connection = conn.get_connection()

        # 查询数据库
        result_set = await connection.session.execute_future(
            statement, paging_state=_paging_state)
        results = [cls(**result) for result in result_set.current_rows]

        # 使用 base64 编码新的 paging_state
        if result_set.paging_state is None:
            new_paging_state = None
        else:
            new_paging_state = base64.b64encode(result_set.paging_state)
        return results, new_paging_state
예제 #4
0
    async def async_iterate(cls,
                            fetch_size: int,
                            fields: list = None,
                            limit: int = None):
        """Iteration by fetch_size
        """
        statement = SimpleStatement(str(
            SelectStatement(cls.column_family_name(),
                            fields=fields,
                            limit=limit)),
                                    fetch_size=fetch_size)
        connection = conn.get_connection()

        paging_state = None
        while True:
            # Execute query
            result_set = await connection.session.execute_future(
                statement, paging_state=paging_state)
            yield [cls(**result) for result in result_set.current_rows]
            paging_state = result_set.paging_state

            # End
            if paging_state is None:
                break