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---
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:
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
Danke
@BlackJack
den bedingten Ausdruck merke ich mir !
Danke