Seite 1 von 1

Datenbank-Api output bind parameter

Verfasst: Dienstag 14. Februar 2006, 17:02
von newyoda
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']

Re: Datenbank-Api output bind parameter

Verfasst: Mittwoch 15. Februar 2006, 07:58
von 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.

Verfasst: Mittwoch 15. Februar 2006, 08:50
von newyoda
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']

Verfasst: Mittwoch 15. Februar 2006, 09:04
von modelnine
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.

Verfasst: Mittwoch 15. Februar 2006, 09:27
von newyoda
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?

Verfasst: Mittwoch 15. Februar 2006, 17:27
von mitsuhiko
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 :-)

Verfasst: Donnerstag 16. Februar 2006, 00:13
von 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.

Verfasst: Dienstag 21. Februar 2006, 10:16
von newyoda
Doch, genau darum gings mir eigentlich ;)