cx_Oracle/oracleDB - daten landen nicht in der Tabelle

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
drnicolas
User
Beiträge: 85
Registriert: Sonntag 24. Juli 2016, 10:32

Mittlerweile lkann ich mit Python und cx_Oracle und oracleDB Daten aus einer Oracle-Tabelle lesen.

Leider klappt es mit dem Schreiben von Daten (hier: INSERT) nicht.

Die Daten scheinen sclhicht nicht in die Tabelle geschrieben zu werden.
Ich bekomme aber eben auch keine Fehlermeldung. Bei den ersten Versuchen gab es aufgrund Problemen mit einer Datumsspalte Fehler.

Dieselbe Tabelle habe ich mal in einer Access-Tabelle verknüpft und dort kann ich porblemlos mit denselben Credentials auch Daten einfügen.

Ich habe mehrere Beispiele gefunden.
in allen Beispielen wird nach dem Öffnen der verbindung zur DB zunächst ein Cursor erstellt, danach mit.execute das INSERT-Kommando ausgeführt und danach wieder geschlossen.

In einem Beispiel aber wird zunächst mit SELECT in den Cursor gelesen und dann erst in den Cursor geschrieben. Kann das daran liegen?
Ich konnte aktuell keinen Erfolg sehen.

Code: Alles auswählen

	sqlstr="INSERT INTO EINTRAG (FK_Person, DATUM,TYP, TYP_EXT, TEXT, ZUORDNUNG) VALUES("

        sqlstr2=sqlstr+':pkp, :dat,'+' \'/\',9, :linkst,\'N\' )'
        conn=openConnection(self)

        cur=conn.cursor()
        cur.execute(sqlstr2,[pk_Patient,Datum, linkstr])
        cur.close()
        conn.close()

__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dir fehlt das commit. Kann ggf. als "auto commit" auf der Verbindung konfiguriert werden, ueblicher ist aber das explizite absetzen nach einer oder mehreren Operationen, damit die eine sinnvolle Transaktion bilden.

Statt mit + baut man Strings mit String-Formatting und noch besser f-Strings zusammen. Wobei ich das hier komplett lassen wuerde, und enifach fuer alle Argumente benannte Attribute benutzen. Und die dann eben fest auf dev benoetigten Wert setzen. Das erspart einem diese Escape-orgie.

Code: Alles auswählen

sqlstr="INSERT INTO EINTRAG (FK_Person, DATUM,TYP, TYP_EXT, TEXT, ZUORDNUNG) VALUES(:pkp, :dat, :typ, :typ_ext, :linkst, :zuordnung)
...
cur.execute(sqlstr2,[pk_Patient,Datum, "/", 9, linkstr, "N"])
drnicolas
User
Beiträge: 85
Registriert: Sonntag 24. Juli 2016, 10:32

Das fehlende Commit war es.

Danke.
Antworten