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
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
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
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