Leere DB, Werte einfügen, sqllite3

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

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.
Zuletzt geändert von DanJJo am Mittwoch 7. August 2013, 10:10, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 18250
Registriert: Sonntag 21. Oktober 2012, 17:20

@DanJJo: erstens wird »execute« niemals einen leeren String zurückliefern und zweitens gibt es sogenannte Funktionen, um Codewiederholungen zu vermeiden.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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 ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Sirius3
User
Beiträge: 18250
Registriert: Sonntag 21. Oktober 2012, 17:20

@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
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
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

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
Antworten