2013-01-12 29 views
0

我正在嘗試編寫一個小應用程序,它可以獲取訪客IP並存儲在Riak數據庫中。在它的/ show路線上,它應該列出所有訪客,即存儲的IP和相關日期。但是,由於某種原因,我要麼只存儲最後一個訪問者,要麼只提取最後一個訪問者。我在這裏做錯了什麼?我確信它不僅錯誤的代碼問題,而且錯誤的方式 - 我試圖從硬鐵SQL用戶切換,我無法包裝我的頭關於沒有'select * from ...'可用;)從Riak與Python和Flask一起存儲(或讀取)多個值

import riak 
import json 
from flask import Flask, request, render_template 
from datetime import datetime 

app = Flask(__name__) 
riak = riak.RiakClient(host='some.domain', port=8087, transport_class=riak.RiakPbcTransport) 


def date(obj): 
    return obj.isoformat() if hasattr(obj, 'isoformat') else obj 


@app.route('/') 
@app.route('/index') 
def index(): 
    db = riak.bucket('visitor') 
    ip = request.remote_addr 
    time = json.dumps(datetime.now(), default=date) 
    new_visitor = db.new('log', data={ 
     'ip': ip, 
     'time': time, 
    }) 
    new_visitor.store() 
    return ip 


@app.route('/show') 
def show(): 
    db = riak.bucket('visitor') 
    visitors = db.get('log') 
    return render_template("show.html", visitors=visitors.get_data()) 


if __name__ == '__main__': 
    app.run(debug=True, host='0.0.0.0') 

回答

0

您正在使用相同的名稱存儲所有內容'log'因此,您每次獲取新請求時都會覆蓋該值。

Riak桶就像python字典,你基本上在每個請求上做訪客['log'] = {... data ...}。您可能想要爲此使用不同的數據結構,或者如果足夠分散,可以將時間用作關鍵字。

+0

呃......那我應該如何儲存它們?如果每次給它們賦予唯一的名字,那麼我不知道從db中獲取什麼,因爲它的nosql並沒有'select * from'可用。 – SpankMe

+0

與python字典一樣,您可以列出存儲桶中的所有密鑰:http://docs.basho.com/riak/latest/references/apis/http/HTTP-List-Keys/ – Oin

+0

該文檔具有巨大的「不適用於生產 - 此操作需要遍歷羣集中存儲的所有密鑰,並且不應在生產中使用。「警告。我認爲,這不是做到這一點的方法。 – SpankMe

相關問題