Ich arbeite gerade ein wenig mit Bottle.
Ich speicher meine Sachen in einer SQL DB.
Wenn ich meine Daten im Template auslese geschieht es so:
%for c in content:
<p>
%for s in c:
{{s}}
%end
</p>
%end
Dann listet er mir alles auf. In der DB gibt es die Spalten "Name", "Adresse", "Sonstiges".
Wie lese ich nun explizit aus, damit ich es besser gestalten kann also quasi so irgendwie:
%for c in content:
<p>
%for s in c:
Name: {{s.name}}
Adresse: {{s.adresse}}
Sonstiges: {{s.sonstiges}}
%end
</p>
%end
Geht das irgendwie?
bottle: expliztes auslesen
Das ist ja kein Bottle-Problem sondern in DB-spezifisches.
Was für eine Engine nutzt du denn?
Was für eine Engine nutzt du denn?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Es geht darum, dass ich unter Python 2.6 + Bottle ein Gästebuch schreiben möchte.
Einträge speicher ich in ner Sql DB.
Bloß nun möchte ich die Einträge-Anzeige ein wenig gestalten:
PeterPan schrieb am 12.12.2010:
Hell worold
=> dachte das geht irgendwie in so einer Form:
{{s.name}} schrieb am {{s.date}}:
{{s.message}}
Einträge speicher ich in ner Sql DB.
Bloß nun möchte ich die Einträge-Anzeige ein wenig gestalten:
PeterPan schrieb am 12.12.2010:
Hell worold
=> dachte das geht irgendwie in so einer Form:
{{s.name}} schrieb am {{s.date}}:
{{s.message}}
Code: Alles auswählen
#....
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute("SELECT name, msg, datum FROM eintraege")
result = c.fetchall()
c.close()
output = template('show.tpl', content = result)
return output
Es gibt verschiedene Möglichkeiten.
Du kannst auf name, msg, datum mit s[0], s[1], s[2] zugreifen.
Oder du machst es wie hier: http://docs.python.org/library/sqlite3. ... ow_factory
Oder du nimmst ein ORM.
Du kannst auf name, msg, datum mit s[0], s[1], s[2] zugreifen.
Oder du machst es wie hier: http://docs.python.org/library/sqlite3. ... ow_factory
Oder du nimmst ein ORM.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Im Tutorial von bottle steht das doch gut beschrieben und man findet diesen Beispiel-Code:
Du musst eben in einer inneren Schleife über die Tupel iterieren...
Code: Alles auswählen
%#template to generate a HTML table from a list of tuples (or list of lists, or tuple of tuples or ...)
<p>The open items are as follows:</p>
<table border="1">
%for row in rows:
<tr>
%for r in row:
<td>{{r}}</td>
%end
</tr>
%end
</table>
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Ja daran hab ich mich auch orintiert.Hyperion hat geschrieben:Im Tutorial von bottle steht das doch gut beschrieben und man findet diesen Beispiel-Code:Du musst eben in einer inneren Schleife über die Tupel iterieren...Code: Alles auswählen
%#template to generate a HTML table from a list of tuples (or list of lists, or tuple of tuples or ...) <p>The open items are as follows:</p> <table border="1"> %for row in rows: <tr> %for r in row: <td>{{r}}</td> %end </tr> %end </table>
Doch wenn ich das in dieser Form amche, denn klatscht er mir da alles einfach so hintereinander hin. Ich kann da nicht sagen:
%for r in row:
{{Inhalt aus der Spalte Name}} schrieb:
<hr>
{{Inhalt der Spalte Nachricht}}
%end
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Dann nimm eben Indexzugriffe, wie jbs beschrieben hat! (Wußte nicht, dass das geht)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Die Frage lautete eigentlich wie entpacke ich Tupel und wtf, warum sind das keine dicts.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
@Sync32: Welche `Now()`-Funktion!? In der Dokumentation von SQLite gibt's eine Seite zu den Datums- und Zeitfunktionen. Da gibt's keine `now()`-Funktion, aber Beispiele -- von denen gleich das allererste zeigt, wie man das aktuelle Datum bekommt.
Wobei man das ja eigentlich auch problemlos im Python-Programm erzeugen kann. Dann ist es unabhängig von irgendwelchen SQL-Dialekten oder spezifischen Datenbankeigenheiten.
Wobei man das ja eigentlich auch problemlos im Python-Programm erzeugen kann. Dann ist es unabhängig von irgendwelchen SQL-Dialekten oder spezifischen Datenbankeigenheiten.
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
nichts gegen SQLite, aber...
1. MySQL kennt den DictCursor, d.h. ein Execute-Statement bzw. das folgende fetch... liefert ein Dict zurück
2. MySQL kennt die Funktion "timestamp", die denn aktuellen Zeitstempel in eine Zelle einträgt.
Wobei: Wenn das deine einzigen "Probleme"
sind - beide lässt sich mir ein paar Zeilen Python-Code auch realisieren.
Gruß, noisefloor
nichts gegen SQLite, aber...
1. MySQL kennt den DictCursor, d.h. ein Execute-Statement bzw. das folgende fetch... liefert ein Dict zurück
2. MySQL kennt die Funktion "timestamp", die denn aktuellen Zeitstempel in eine Zelle einträgt.
Wobei: Wenn das deine einzigen "Probleme"

Gruß, noisefloor
Schau dir query_db aus der Flask-Dokumentation ab 
http://flask.pocoo.org/docs/patterns/sqlite3/#sqlite3
Und mit Jinja2 kannst du auf Dictionaries auch zugreifen wie du willst:

http://flask.pocoo.org/docs/patterns/sqlite3/#sqlite3
Und mit Jinja2 kannst du auf Dictionaries auch zugreifen wie du willst:
Code: Alles auswählen
d = dict(foo='bar', x='y')
#####
{{ d.foo }} # = bar
{{ d.x }} # = y
the more they change the more they stay the same
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Nur etwas Vorsicht: Das Flask Beispiel für query_db() macht ein cur.fetchall(), selbst wenn nur einen einziger Eintrag gebraucht wird. Der db_query(one=True) Parameter wird denkbar schlecht umgesetzt.Dav1d hat geschrieben:Schau dir query_db aus der Flask-Dokumentation ab
http://flask.pocoo.org/docs/patterns/sqlite3/#sqlite3
Bottle: Micro Web Framework + Development Blog
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
das funktioniert doch mit jedem anderen Framework genau so (wenn man nicht gerade genau die "before-request" Funktion braucht).
Das Problem des OP ist doch, wie man das Ergebnis eines SQL-Queries "richtig" in Template bekommt bzw. wie man das Ergebnis des Queries (bei SQLite eine Liste von Tuplen) in ein Dict bekommt.
Gruß, noisefloor
das funktioniert doch mit jedem anderen Framework genau so (wenn man nicht gerade genau die "before-request" Funktion braucht).
Das Problem des OP ist doch, wie man das Ergebnis eines SQL-Queries "richtig" in Template bekommt bzw. wie man das Ergebnis des Queries (bei SQLite eine Liste von Tuplen) in ein Dict bekommt.

Gruß, noisefloor
@noisefloor, worauf spielst du an? auf app.before/after_request von Flask? Mir ging es nicht darum jemanden zu Flask zu "bekehren" (dazu kenne ich mich selber viel zu wenig aus), sondern auf ein Beispiel in der Flask-Dokumentation hinzuweisen, wie man aus einem SQL-Fetch ein Dictionary macht (query_db).
the more they change the more they stay the same
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Ansonsten hast du natürlich recht.
Bei mitsuhiko findet man immer interessant Code-Schnippsel jenseits seiner eigentlichen Progs.
Gruß, noisefloor
Axo. Es las' sich so, als ob Flask das Problem lösen würde (was ja nicht so ist).Mir ging es nicht darum jemanden zu Flask zu "bekehren" (dazu kenne ich mich selber viel zu wenig aus), sondern auf ein Beispiel in der Flask-Dokumentation hinzuweisen, wie man aus einem SQL-Fetch ein Dictionary macht (query_db).
Ansonsten hast du natürlich recht.

Gruß, noisefloor