Seite 1 von 1

Leere DB, Werte einfügen, sqllite3

Verfasst: Mittwoch 7. August 2013, 09:32
von DanJJo
Hey gibts hierfür eine schönere lösung ? Es geht einfach darum zu schauen, ob ein Datensatz existiert bzw die ID aus zu lesen, da die ID für weitere module wichtig ist.

Mir persönlich gefällts nicht wenn ich in mehreren abschnitten so einen if, else block hab.

Code: Alles auswählen

	row = db.execute('SELECT BlaID FROM Bla ORDER BY BlaID DESC LIMIT 1').fetchone()
	if row == None:
	  ID = 0
	else:
	  ID = row[0]   
danke--- :roll:


EDIT*: ja ich mein Halt None....ja klar ich könnte das in einer Funktion packen aber ich dachte, dass es evtl irgendeine sql geschichte gibt, die mir direkt None durch 0 ersetzt.

Re: Leere DB, Werte einfügen, sqllite3

Verfasst: Mittwoch 7. August 2013, 10:03
von Sirius3
@DanJJo: erstens wird »execute« niemals einen leeren String zurückliefern und zweitens gibt es sogenannte Funktionen, um Codewiederholungen zu vermeiden.

Re: Leere DB, Werte einfügen, sqllite3

Verfasst: Mittwoch 7. August 2013, 10:14
von jens
Man könnte nun anfangen eine Funktion für diesen Fall zu schreiben. Dann gibt es noch x andere Fälle für die man wieder x Funktionen schreiben kann... Halt alles machen, damit die Schnittstelle zwischen DB<->Python bequemer wird... Doch was kommt am Ende raus?

Besser gleich ein ORM hernehmen und sich viel Arbeit sparen ;)

Re: Leere DB, Werte einfügen, sqllite3

Verfasst: Mittwoch 7. August 2013, 10:23
von Sirius3
@jens: ein ORM nimmt Dir nur die Arbeit ab, SQL-Befehle zu schreiben, die bei komplizierten Tabellenverknüpfungen etwas aufwendiger sein können. Die Verarbeitung des Ergebnisses eines SELECTS nimmt Dir aber kein ORM ab.

@DanJJo: Wenn Du eine Abfrage wie die von Dir gezeigt brauchst, hast Du wahrscheinlich irgendetwas an Deinem Datenbankdesign falsch gemacht. Das gleiche Ergebnis erhältst Du ohne »if« mit:

Code: Alles auswählen

max_bla_id = db.execute('SELECT max(BlaID) FROM Bla').fetchone()[0] or 0

Re: Leere DB, Werte einfügen, sqllite3

Verfasst: Mittwoch 7. August 2013, 11:00
von BlackJack
DanJJo: Das ``if``/``else`` liesse sich auch als bedingter Ausdruck formulieren:

Code: Alles auswählen

        id_ = row[0] if row is not None else 0

Re: Leere DB, Werte einfügen, sqllite3

Verfasst: Mittwoch 7. August 2013, 14:27
von DanJJo
Sirius3 hat geschrieben:@jens: ein ORM nimmt Dir nur die Arbeit ab, SQL-Befehle zu schreiben, die bei komplizierten Tabellenverknüpfungen etwas aufwendiger sein können. Die Verarbeitung des Ergebnisses eines SELECTS nimmt Dir aber kein ORM ab.

@DanJJo: Wenn Du eine Abfrage wie die von Dir gezeigt brauchst, hast Du wahrscheinlich irgendetwas an Deinem Datenbankdesign falsch gemacht. Das gleiche Ergebnis erhältst Du ohne »if« mit:

Code: Alles auswählen

max_bla_id = db.execute('SELECT max(BlaID) FROM Bla').fetchone()[0] or 0

genau nach sowas hab ich gesucht! funktioniert und alles gut :mrgreen:

Danke

@BlackJack

den bedingten Ausdruck merke ich mir !

Danke