Bottle, HTML Datenbankzugriff

Django, Flask, Bottle, WSGI, CGI…
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

also ich hab kA wie ich dem sqlite3.row object seine info entziehen kann. Es ist traurig, dass man nicht einfach mal eine hilfe bekommt die sagt...nimm funktion strconvert() und fertig .... :(
BlackJack

@DanJJo: Das ist ein Grunddatentyp in Python. Den sollte man kennen wenn man ein Grundlagen-Tutorial durchgearbeitet hat. Und das sollte man tun, wenn man mit Python programmieren will. Wenn Dir jetzt jemand sagt wie's geht, und es ist wirklich total einfach, dann kommst Du sehr wahrscheinlich bald wieder mit so einer trivialen Grundlagenfrage. Wir sind hier nicht dazu da das Tutorial vorzulesen. Und niemand kann Dir die Einarbeitung in eine Programmiersprache abnehmen.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Probier das mal:

Botte App:

Code: Alles auswählen

sql ="""SELECT bla FROM blabla ORDER BY blub ASC"""
cur.execute(sql)
result = cur.fetchall()
anzeige = template('template.tpl',rows=result) #Oder wie du dein Templ auch immer nennst
t = Template(tpl)
return t.substitute(anzeige)
Template:

Code: Alles auswählen

%for row in rows:
  <tr>
  %for col in row:
    <td>{{col}}</td>
  %end
  </tr>
%end
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

DanJJo hat geschrieben:nun steht in row meine Info in dem format....

(u 'bla',)

komm ich irgendwie einfach nur an das "bla" ohne die utf geschichte drum?
Du gehst schon von falschen Voraussetzungen aus. Was du siehst ist die Repräsentation des Inhalts, nicht der Inhalt selber. Es handelt sich offensichtlich um ein Tupel.

Zudem hat die String-Repräsentation u'bla' nichts mit einer UTF-Codierung zu tun. Im Gegenteil, das führende u zeigt dir an, dass es sich um einen Unicodestring handelt.

Du solltest wirklich zumindest die ersten Kapitel des Tutorials durchgehen bevor du weitermachst. Du wirst sonst immer wieder auf Grundlagenprobleme stoßen die dich bei der Entwicklung aufhalten und die du glaubst nicht selber lösen zu können.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

Ihr habt ja recht. :roll:

aber eine Design-frage stell ich trotzdem mal...

nun hab ich ein Login auf der Homepage die aus mehreren templates besteht....

main.tpl,
login.tpl,
register.tpl,
suche.tpl,
usw.

auf jedem dieser *.tpl ist nun ein Bereich bei dem Login / Register steht (beide natürlich verlinkt) Wird nun ein User eingelogged setze ich ein cookie, um ihn wieder zu erkennen usw.

jetzt hätte ich natürlich gerne, dass aus dem Login / Register bereich ein User / Benutzerprofil bereich wird. Jetzt hatte ich natürlich die idee, die *.tpl für eingelogged und nicht eingelogged zu machen aber dann hat man doch so viele *.tpl für eine solch kleine Änderung...das muss doch auch einfacher gehen mit irgendeinem Dynamischen breich, einer If abfrage nach dem cookie etc.?! kann mir da einer ein Tipp geben in welche richtung ich das Designen muss und unter welcher rubrik ich da mal schauen sollte?!

Danke
BlackJack

@DanJJo: Für Benutzereinstellungen wenn man eingeloggt ist, gibt es doch in der Regel eine eigene Seite.

Bei Deiner Beschreibung frage ich mich gerade ob Du den Login-Bereich jetzt tatsächlich in jedes Template geschrieben hast? Das sollte man natürlich nicht machen, denn dann muss man den ja an x Stellen verändern, wenn man mal etwas verändern möchte oder muss. Für so etwas gibt es in Templatesystemen so etwas wie Vererbung und/oder „includes” von anderen (Teil)Templates.

Und man kann selbstverständlich auch Weichen mit Bedingungen in ein Template einbauen, zum Beispiel wenn nicht eingeloggt, dann Eingabefelder für Name und Passwort anzeigen, sonst Name und Abmeldeschaltfläche.
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

@DanJJo:
normalerweise erstellt man ein Basis-Template, das den Grundaufbau (Menüzeile, Footer, Login-, bzw. Profil-Link, usw.)
Die eigentlichen Seiten binden jeweils dieses Template ein.
Im Basis-Template wird über %if loggedin ... entschieden, was ein eingeloggter und ein nichteingeloggter Benutzer für Links sieht.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

Ok super ja danke hab ich verstanden und angefangen neu zu strukturieren jetzt aber noch eine frage...

hab nun

Code: Alles auswählen

					%if logged:
					  %name="siggned"
					  %_include (name, _stdout=_stdout, a='benutzerkonto')
					%else:
					  %name="logregi"
					  %_include (name, _stdout=_stdout, a='login', b='register')
logged = request.get_cookie("account", secret='DuundIch') wäre in der main.py....natürlich kennt er im *.tpl logged nicht...wie wär der asuweg?
BlackJack

@DanJJo: Der Ausweg wäre natürlich das mit den anderen Daten ans Template zu übergeben.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

läuft
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

weitere Frage....gibt es eine möglichkeit doppelte Einträge in der Datenbank zu vermeiden ohne alles mit 'if's" regeln zu müssen?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

DanJJo hat geschrieben:weitere Frage....gibt es eine möglichkeit doppelte Einträge in der Datenbank zu vermeiden ohne alles mit 'if's" regeln zu müssen?
Definiere das Feld oder die Felder als UNIQUE und fange nach dem fehlgeschlagenen Einfügen den Fehler ab.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

danke wieder mal und...

Ich wieder mal

gibt es in Bottlepy eine möglichkeit "switch:case" wie in java zu simulieren?

müsste sonst 32 if abfragen schreiben :|
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

DanJJo hat geschrieben:gibt es in Bottlepy eine möglichkeit "switch:case" wie in java zu simulieren?

müsste sonst 32 if abfragen schreiben :|
In Python nutzt man dafür Dictionaries.
Das Leben ist wie ein Tennisball.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

Ich hab da mal eine Frage zu einer SQL abfrage. Angenommen ich habe folgende Tabellen

Wagen values (Name,Modell,...) , User values(Name,...) , Favorisiert values(UserName,WagenName,..)

Nun würde ich gerne eine Tabelle ausgeben, die Beinhaltet:
WagenName, Anz.der.Fav. -

leider komme ich da nicht hin :(

meine Ansätze

SELECT Wagen.Name, Count(Wagen.Name) FROM Wagen, User, Favorisiert WHERE User.Name=Favorisiert.UserName AND Wagen.Name = Favorisiert.WagenName.

mir ist klar, dass er bei Count(Wagen.Name) die Anzahl der Wagen Zählt, die in der Tabelle stehen aber nicht die jeweilige Anz für jeden einzelnen Wagentyp.
Ich denke, dass ich in der "Count" anweisung meine Wagen zaehlen muss aber wie nur?! kann mir da bitte einer helfen. Danke
Zuletzt geändert von DanJJo am Mittwoch 27. Februar 2013, 13:02, insgesamt 1-mal geändert.
BlackJack

@DanJJo: Das sollte eigentlich überhaupt nicht nötig sein wenn Du bei Texten durchgehend mit dem `unicode`-Typ arbeitest. Vor allem sollte eine Abfrage immer ein `unicode`-Objekt liefern.

Code: Alles auswählen

In [14]: cur.execute('select Vorname, Nachname from personen')
Out[14]: <sqlite3.Cursor at 0x8fddaa0>

In [15]: cur.fetchall()
Out[15]: [(u'Max', u'Mustermann')]
Und beim Eintragen erwartet SQLite UTF-8 kodierte `str`-Objekte oder `unicode`-Objekte.

Etwas global zu definieren, so dass alle Kodierungen auf magische Weise passieren geht nicht. Die „magic line” gibt an wie der Quelltext kodiert ist und muss mit der tatsächlichen Kodierung des Quelltextes überein stimmen. Das ist aber nur für den Compiler wichtig, zur Laufzeit hat diese Angabe keine Auswirkung.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

Super Danke.

Ich hab da mal eine Frage zu einer SQL abfrage. Angenommen ich habe folgende Tabellen

Wagen values (Name,Modell,...) , User values(Name,...) , Favorisiert values(UserName,WagenName,..)

Nun würde ich gerne eine Tabelle ausgeben, die Beinhaltet:
WagenName, Anz.der.Fav. -

leider komme ich da nicht hin :(

meine Ansätze

SELECT Wagen.Name, Count(Wagen.Name) FROM Wagen, User, Favorisiert WHERE User.Name=Favorisiert.UserName AND Wagen.Name = Favorisiert.WagenName.

mir ist klar, dass er bei Count(Wagen.Name) die Anzahl der Wagen Zählt, die in der Tabelle stehen aber nicht die jeweilige Anz für jeden einzeln
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

Code: Alles auswählen

select WagenName, count(*) from Favorisiert group by WagenName
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

AH mit group by. Danke :)
BlackJack

Wobei jetzt in der `Favorisiert`-Tabelle hoffentlich nicht wirklich die Benutzer- und Wagen*namen* stehen.
Antworten