Erkennen, ob zum abrufen von psycopg2 cursor oder nicht?
Let ' s sagen, wenn ich folgenden Befehl ausführen.
insert into hello (username) values ('me')
und ich lief wie
cursor.fetchall()
Bekomme ich die folgende Fehlermeldung
psycopg2.ProgrammingError: no results to fetch
Wie kann ich erkennen, ob der Aufruf von fetchall() oder nicht ohne Prüfung der Abfrage auf "einfügen" oder "Auswahl"?
Dank.
- ist die erste Zeile sieht so aus
cursor.execute("insert into hello (username) values ('me')")
? - Chris B ist richtig, aber es gibt eine Allgemeine Besorgnis, dass eine beliebige Abfrage (könnte
insert
oderselect
oder etwas anderes) hat dies bis weit in den code, ohne zu wissen, welche Art von Abfrage es ist. Wo ist die SQL eingegeben werden kann? Sind Sie ein Schutz gegen SQL-Injection? Ich empfehle, dass der code sollte sich bewusst sein, von der Art der Abfrage bearbeitet und haben verschiedene code-Pfade für den Umganginserts
vsselects
, idealerweise mit einem bekannten Satz von Abfragen - eventuell gespeicherte Prozeduren - und, abgesehen von dem Fall, wo eine select-Abfrage gibt keine Beschreibung, die auf diese Frage nicht ein Problem sein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf dieses Attribut:
Nachdem Sie ausgeführt haben, wird Ihre Abfrage, es wird auf Keine eingestellt, wenn keine Zeilen zurückgegeben wurden, oder die Angaben anderweitig, zum Beispiel:
Abfangen von Ausnahmen ist nicht ideal, weil es einen Fall, wo Sie überschreiben eine echte Ausnahme.
cur.statusmessage
können für diesen Zweck verwendet werden. Dies wird zurückSELECT 0
oderINSERT 0 1
.description
(machen Introspektion möglich ist).Die akzeptierte Antwort, die die Verwendung
cur.description
löst das problem nicht mehr.cur.statusmessage
kann eine Lösung sein. Dies gibtSELECT 0
oderINSERT 0 1
. Eine einfache string-operation kann dann helfen, die letzten Abfrage.Das problem ist, dass das, was sich herausstellt, gar Keine ist das Ergebnis der Kur.fetchone()
So wird der Weg um die Schleife zu stoppen ist :
cursor.Beschreibung nie Keine!