Seite 2 von 3

Re: Bottle, HTML Datenbankzugriff

Verfasst: Dienstag 19. Februar 2013, 10:08
von 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.

Re: Bottle, HTML Datenbankzugriff

Verfasst: Dienstag 19. Februar 2013, 11:21
von Sirius3
@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.

Re: Bottle, HTML Datenbankzugriff

Verfasst: Dienstag 19. Februar 2013, 15:31
von DanJJo
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?

Re: Bottle, HTML Datenbankzugriff

Verfasst: Dienstag 19. Februar 2013, 15:42
von BlackJack
@DanJJo: Der Ausweg wäre natürlich das mit den anderen Daten ans Template zu übergeben.

Re: Bottle, HTML Datenbankzugriff

Verfasst: Dienstag 19. Februar 2013, 15:51
von DanJJo
läuft

Re: Bottle, HTML Datenbankzugriff

Verfasst: Mittwoch 20. Februar 2013, 16:17
von DanJJo
weitere Frage....gibt es eine möglichkeit doppelte Einträge in der Datenbank zu vermeiden ohne alles mit 'if's" regeln zu müssen?

Re: Bottle, HTML Datenbankzugriff

Verfasst: Mittwoch 20. Februar 2013, 17:13
von /me
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.

Re: Bottle, HTML Datenbankzugriff

Verfasst: Donnerstag 21. Februar 2013, 18:55
von DanJJo
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 :|

Re: Bottle, HTML Datenbankzugriff

Verfasst: Donnerstag 21. Februar 2013, 19:13
von EyDu
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.

Re: Bottle, HTML Datenbankzugriff

Verfasst: Montag 25. Februar 2013, 18:07
von DanJJo
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

Re: Bottle, HTML Datenbankzugriff

Verfasst: Montag 25. Februar 2013, 18:22
von 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.

Re: Bottle, HTML Datenbankzugriff

Verfasst: Mittwoch 27. Februar 2013, 13:16
von DanJJo
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

Re: Bottle, HTML Datenbankzugriff

Verfasst: Mittwoch 27. Februar 2013, 13:36
von Sirius3

Code: Alles auswählen

select WagenName, count(*) from Favorisiert group by WagenName

Re: Bottle, HTML Datenbankzugriff

Verfasst: Mittwoch 27. Februar 2013, 13:44
von DanJJo
AH mit group by. Danke :)

Re: Bottle, HTML Datenbankzugriff

Verfasst: Mittwoch 27. Februar 2013, 16:46
von BlackJack
Wobei jetzt in der `Favorisiert`-Tabelle hoffentlich nicht wirklich die Benutzer- und Wagen*namen* stehen.

Re: Bottle, HTML Datenbankzugriff

Verfasst: Mittwoch 27. Februar 2013, 18:49
von Sirius3
@ DanJJo: normalerweise hat jede Tabelle eine Spalte ID als primary key der zum Querverweis auf andere Tabellen benutzt wird.

Code: Alles auswählen

SELECT Wagen.Name, count(*) FROM Wagen, Favorisiert WHERE Wagen.id=Favorisiert.Wagen_Id GROUP BY Wagen_Id

Re: Bottle, HTML Datenbankzugriff

Verfasst: Donnerstag 28. Februar 2013, 12:42
von DanJJo
ich bin ja klein und fang grad erst an etwas rum zu testen :roll: also verzeih mir, dass es noch nicht optimal ist blackjack

Ich habe ein Syntaktisches Problem....

folgendes:
Ich habe ein dict mit mehreren enden.

Code: Alles auswählen

look = { "1" : "in (SELECT AutoName FROM Wagen WHERE WagenName LIKE ?),('%'+import+'%',)" ....}
<- import ist hierbei etwas, das ich aus meinem tpl bekomme

und einen festen Anfangsstring.

Code: Alles auswählen

anfangsstring="""SELECT AutoName,ps,hubraum FROM Wagen WHERE WagenName """
anfangsstring+=look.get("1", "1"))
cur=db.execute(anfangsstring)
nun bekomm ich aber immer die meldung, dass die syntax nicht stimmt...liegt es an dem "import" ? dass das nicht funktioniert oder sollte das eigentlich kein problem sein?

Re: Bottle, HTML Datenbankzugriff

Verfasst: Donnerstag 28. Februar 2013, 13:01
von BlackJack
@DanJJo: Das liegt daran, dass Du in der Zeichenkette SQL- und Python-Syntax vermischst. Und die Datenbank kann mit dem Teil, den Du für Python verwenden müsstest, nichts anfangen. So ein Funktionsaufruf mit einer Variablen als Argument ist keine textuelle Ersetzung und das Ausführen des Ergebnisses als Python-Quelltext.

Ich denke es ist die Stelle in der Entwicklung erreicht, in der Du dringend über SQLAlchemy nachdenken solltest, um Anfragen nicht aus Zeichenketten zusammen zu basteln.

Re: Bottle, HTML Datenbankzugriff

Verfasst: Donnerstag 28. Februar 2013, 13:12
von DanJJo
BlackJack hat geschrieben:@DanJJo: Das liegt daran, dass Du in der Zeichenkette SQL- und Python-Syntax vermischst. Und die Datenbank kann mit dem Teil, den Du für Python verwenden müsstest, nichts anfangen. So ein Funktionsaufruf mit einer Variablen als Argument ist keine textuelle Ersetzung und das Ausführen des Ergebnisses als Python-Quelltext.

Ich denke es ist die Stelle in der Entwicklung erreicht, in der Du dringend über SQLAlchemy nachdenken solltest, um Anfragen nicht aus Zeichenketten zusammen zu basteln.
hmpf also besteht gar keine möglichkeit mit der überlegung, die ich hatte ?! :|

Re: Bottle, HTML Datenbankzugriff

Verfasst: Donnerstag 28. Februar 2013, 13:26
von BlackJack
@DanJJo: Jain. *So* natürlich nicht, Du müsstest im Wörterbuch zwei Sachen hinterlegen: SQL-(Teil)Ausdruck und Wert der Eingesetzt werden soll (oder eine Funktion die diesen Wert errechnet). Wobei ``('%'+import+'%',)`` als Python-Quelltext natürlich nicht geht, weil Namen keine Python-Schlüsselwörter sein dürfen. Das heisst Du hättest diesem Namen vorher auch gar keinen Wert zuweisen können.

SQLAlchemy ist aber trotzdem besser, weil man damit deutlich schwieriger syntaktisch falsches SQL erzeugen kann (solange man nicht absichtlich „rohe” SQL-Teilausdrücke einbaut).