2012-04-03 20 views
2

ich einen Kolben App habe, die eine sqlite db fragt:sqlite db aus Kolben nur aufgerufen, gibt Variablen, nicht Wert

@app.route('/<subject_id>') 
def subject_id_lookup(subject_id): 
    entries = query_db('select visitdt, cvnotes from exam where id = ?', 
         [subject_id], one=True) 
    return render_template('show_results.html', entries = entries) 

I Kolben Funktionen weitgehend unverändert von dem docs verwenden einschließlich query_db()

def query_db(query, args=(), one = False): 
    """Queries the database and returns a list of dictionaries""" 
    cur = g.db.execute(query, args) 
    rv = [dict((cur.description[idx][0], value) 
     for idx, value in enumerate(row)) for row in cur.fetchall()] 
    return (rv[0] if rv else None) if one else rv 

Schließlich ist hier meine show_results.html Datei:

{% extends "layout.html" %} 
{% block body %} 
    <ul class=entries> 
     {% for entry in entries %} 
     <li><h2>{{ entry }}</h2> 
     <br> 
     {% else %} 
     <li><em>No entry here</em> 
     {% endfor %} 
    </ul> 
    {% endblock %} 

Die Abfrage läuft gut aber das Nichts wird zurückgegeben, außer den Variablennamen visitdt & cvnotes. Wenn ich die obige Zeile auf <li><h2>{{ entry.cvnotes }}</h2> ändere, gibt es nichts zurück. Wie kann ich meine Abfrage ändern, um Ergebnisse von meiner subject_id_lookup() Funktion anzuzeigen?

Antwort

3

Das Problem ist, dass query_db verschiedene Dinge zurückgibt, je nachdem, ob Sie oder one=False angeben.

>>> query_db(your_query, [some_id], one=True) 
{visittd: "a value", cvnotes: "some notes"} 

>>> query_db(your_query, [some_id], one=False) 
[{visittd: "a value", cvnotes: "some notes"}] # Note the wrapping list 

Wenn Sie über ein Wörterbuch aufzuzählen ist das Ergebnis der Schlüssel im Wörterbuch - wenn Sie über eine Liste aufzählen, ist das Ergebnis die Einträge in der Liste ist.

>>> for thing in query_db(your_query, [some_id], one=True): 
... print thing 
visitdt 
cvnotes 

>>> for thing in query_db(your_query, [some_id], one=False): 
... print thing 
{visittd: "a value", cvnotes: "some notes"} 

Wenn Sie die gleiche Vorlage verwenden, und Sie wissen, dass es nur geht ein Wert für einen id zurückgegeben werden (oder wenn Sie mit mehr als einem Wert mit dem Umgang in Ordnung sind) einfach entfernen Sie das one=True Schlüsselwort-Argument in subject_id_lookup. entries ist dann eine Liste eines Wörterbuchs mit den Schlüsseln visitdt und cvnotes - wenn Sie in Ihrer Vorlage darüber iterieren, wird jeder Eintrag ein Ergebniswörterbuch (und nicht ein Schlüssel im Einzelergebniswörterbuch) und {{ entry.cvnotes }} funktioniert.

Verwandte Themen