2013-01-12 3 views
0

방문자 IP를 가져 와서 Riak 데이터베이스에 저장하는 작은 앱을 작성하려고합니다./show route에는 모든 방문자, 즉 저장된 IP 및 관련 날짜가 나열되어야합니다. 그러나 어떤 이유로 든 마지막 방문자 만 저장하거나 마지막 방문자 만 가져 오는 중입니다. 여기서 내가 뭘 잘못하고 있니? 확실한 잘못된 코드 문제뿐만 아니라 잘못된 길 - 확실한 SQL 사용자로부터 전환하려고하고 있으며 '선택 *에서 ...'이 가능하지 않겠다고 머리를 감쌀 수 있습니다.)Python과 Flask로 Riak에서 여러 값을 한 번에 저장 (또는 페치)

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 dict와 비슷하며 기본적으로 각 요청마다 방문자 [ 'log'] = {... data ...}를 수행합니다. 다른 데이터 구조를 사용하거나 시간이 충분하지 않은 경우 키로 사용할 수도 있습니다.

+0

음 ... 그럼 어떻게 보관해야합니까? if'd가 매번 고유 한 이름을 주면, nosql부터 'select * from'을 사용할 수 없기 때문에 db에서 가져올 항목을 알지 못합니다. – SpankMe

+0

python dict와 같이 버킷의 모든 키를 나열 할 수 있습니다. http://docs.basho.com/riak/latest/references/apis/http/HTTP-List-Keys/ – Oin

+0

해당 문서에는 "Not for production -이 작업을 수행하려면 클러스터에 저장된 모든 키를 통과해야하며 프로덕션 환경에서는 사용하면 안됩니다. " 경고. 나는 이것이 이것을하는 방법이 아니라고 생각한다. – SpankMe

관련 문제