2017-07-08 17 views
0

Apache Cassandraデータベース(Rest Api)のキースペースをリストするには、次のコードがあります。問題は2.0で行われたApache Cassandraデータベースのコードバージョンです。 schema_keyspacesからCassandra Python RestApiを修正しました

選択keyspace_nameは、バージョン3.0では動作しません。また、私は、クエリを置き換える場合:

from math import ceil 
class Pagination(object): 
def __init__(self, page, per_page, total_count): 
    self.page = page 
    self.per_page = per_page 
    self.total_count = total_count 

@property 
def pages(self): 
    return int(ceil(self.total_count/float(self.per_page))) 

@property 
def has_prev(self): 
    return self.page > 1 

@property 
def has_next(self): 
    return self.page < self.pages 

def iter_pages(self, left_edge=2, left_current=2, 
       right_current=5, right_edge=2): 
    last = 0 
    for num in xrange(1, self.pages + 1): 
     if num <= left_edge or \ 
      (num > self.page - left_current - 1 and \ 
      num < self.page + right_current) or \ 
      num > self.pages - right_edge: 
      if last + 1 != num: 
       yield None 
      yield num 
      last = num 
@app.route('/keyspaces/', defaults={'page': 1}, methods=['GET']) 
@app.route('/keyspaces/page/<int:page>', methods=['GET']) 
def getKeyspaces(page): 
auth_provider = PlainTextAuthProvider(username='admin', 
     password='root') 
cluster = Cluster(['hostname'], 
        auth_provider=auth_provider) 
session = cluster.connect() 
rows = session.execute('select keyspace_name from schema_keyspaces') 
keyspaces = [] 
for row in range(len(rows)): 
    keyspaces.append(rows[row][0]) 
    pages = keyspaces[(page - 1) * PER_PAGE:PER_PAGE * page] 
    if not pages and page != 1: 
     abort(404) 
     pagination = Pagination(page, PER_PAGE, len(rows)) 
     return render_template('listkeyspace.html', 
           pagination=pagination, pages=pages, 
           section='getKeyspaces') 

enter image description here

答えて

1
:バージョン3.0で動作しますsystem_schema.keyspaces SELECT * FROM私は次のエラーを持っています

docsによると、ResultSetはイテレータです。

rows = session.execute('select keyspace_name from schema_keyspaces') 
row_list = list(rows) 
for row in range(len(row_list)): 
    ... 

、その後、体全体row_listではなくrowsへのインデックス:あなたは結果へのインデックスにできるようにしたい場合は、まず最初にこのようにすべての結果を反復、listにイテレータを変換する必要がありますあなたのループの

+0

私はあなたが言ったことをするときに別の間違いがあります: RuntimeError:結果が反復されたときにインデックス演算子を使用できません。 On keyspaces.append(rows [row] [0]) –

+0

右。上で述べたように、ループの本体を通して、 'rows'のすべてのインスタンスを' row_list'に変更する必要もあります。だから 'keyspaces.append(rows [row] [0])'は 'keyspaces.append(row_list [row] [0]) 'になるはずです –

+0

良いです、それは作品です、私のfreindありがとう;) –

関連する問題