Datenbank-Api output bind parameter

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
newyoda
User
Beiträge: 4
Registriert: Dienstag 14. Februar 2006, 16:52

Hallo,

ich nutze cx_Oracle als Datenbankmodul, welches sich sehr an die von Python vorgeschlagene API hält.
Ich versuche, in einem Codeblock eine Variable zu setzen, welche ich später wieder auslesen möchte. Das Beispiel ist zwar nicht sehr sinnvoll, demonstriert aber, was ich vor habe. So, wie ich das vor habe, wird die Variable in das Script scheinbar übergeben, allerdings kommt nicht der neue Wert zurück.
c ist mein Cursor.
Hat jemand einen Hinweis für mich? Ich bin auch nicht gerade ein Python-Profi, ich nutze es nur für kleinere Sachen.

Code: Alles auswählen

blabind = {'bla':bla}
c.execute("begin :bla := 'Hallo Welt'; end;", **blabind)
print blabind['bla']
BlackJack

newyoda hat geschrieben:

Code: Alles auswählen

blabind = {'bla':bla}
c.execute("begin :bla := 'Hallo Welt'; end;", **blabind)
print blabind['bla']
Mit den beiden ``**`` ist Deine zweite Zeile äquivalent zu

Code: Alles auswählen

c.execute("begin :bla := 'Hallo Welt'; end;", bla=bla)
Das sollte eigentlich nicht funktionieren. An der Stelle müsste das Dictionary ohne die Sternchen stehen.
newyoda
User
Beiträge: 4
Registriert: Dienstag 14. Februar 2006, 16:52

aha, ich hatte ** in nem Beispiel gesehen und hab ihn dann zum Testen einfach mal übernommen. Aber vorher hab ich das auch schon ohne ** probiert, da gings trotzdem nich. Habs auch grade nochmal versucht (falls es nur auf die Tagesform ankommt) ... geht einfach nich. Oder muss ich noch was beachten?

Code: Alles auswählen

blabind = {'bla':bla}
c.execute("begin :bla := 'Hallo Welt'; end;", blabind)
print blabind['bla']
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Das hier lesen:
und dann mal gucken was:

Code: Alles auswählen

conn.paramstyle
sagt. Die Erklärung für das Feld findest Du bei der ersten URL. Soweit ich weiß kann cx_Oracle keine Named-Parameters (und erwartet dementsprechend auch kein dict, sondern ein Iterable, also tuple oder list), aber vielleicht irre ich mich da auch. Auf jeden Fall bringt Dir ein Nachgucken mehr Informationen.
--- Heiko.
newyoda
User
Beiträge: 4
Registriert: Dienstag 14. Februar 2006, 16:52

paramstyle ist bei mir "named"
daran kanns also nicht liegen. Vielleicht is das Modul auch einfach nur unfähig?
Gibts vielleicht noch andre einigermaßen aktuelle Oracle-Module?
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

newyoda hat geschrieben:paramstyle ist bei mir "named"
daran kanns also nicht liegen. Vielleicht is das Modul auch einfach nur unfähig?
Nein. Das läuft beispielsweise Problemlos mit SQLAlchemie. Und das würde ich an deiner Stelle auch mal probieren :-)
TUFKAB – the user formerly known as blackbird
BlackJack

Nachdem ich mir den ersten Beitrag nochmal durchgelesen habe: Du erwartest jetzt aber nicht, das die ``print``-Zeile 'hallo welt' ausgibt, oder?

Mit dem `execute()` hast Du eine Variable beim Datenbankserver gesetzt! Von da müsstest Du ihn auch wieder auslesen. Wie auch immer man das bei Oracle macht, da habe ich keine Erfahrung.
newyoda
User
Beiträge: 4
Registriert: Dienstag 14. Februar 2006, 16:52

Doch, genau darum gings mir eigentlich ;)
Antworten