Ik heb dit geprobeerd met een speelgoedtafel in Postgres en het werkt, ik denk dat het equivalent zou moeten zijn in Oracle, laat het me weten.
In [15]:
result = session.connection().execute("insert into usertable values('m6', 'kk2', 'Chile') returning username")
for r in result:
print r
(u'm6',)
Ik hoop dat het helpt.
BEWERKEN voor Oracle :de enige manier om het te doen die ik heb gevonden is niet erg elegant. Het zou de onbewerkte verbinding onder SQLAlchemy
gebruiken verbinding, zoiets als:
In [15]:
from sqlalchemy.sql import text
import cx_Oracle
cur = session.connection().connection.cursor()
out = cur.var(cx_Oracle.STRING)
par = { "u" : out }
cur.prepare("insert into usertable values('m34', 'kk2', 'Chile') returning username into :u")
cur.execute(None, par)
print(out)
print(type(out))
print(out.getvalue())
<cx_Oracle.STRING with value 'm34'>
<type 'cx_Oracle.STRING'>
m34
Helaas denk ik niet dat er een manier is om een cx_oracle variable
te maken het is bijvoorbeeld gewoon niet beschikbaar in de api, zie docs .
Er is dan geen manier om het maken van de cursor te vermijden, zelfs als het werkt wanneer u meer delegeert aan SQLAlchemy
:
In [28]:
from sqlalchemy.sql import text
import cx_Oracle
cur = session.connection().connection.cursor()
out = cur.var(cx_Oracle.STRING)
par = { "u" : out }
q = text("insert into usertable values('m43', 'kk2', 'Chile') returning username into :u")
result = session.connection().execute(q, par)
print(par["u"])
print(out)
type(out)
<cx_Oracle.STRING with value 'm43'>
<cx_Oracle.STRING with value 'm43'>
Out[28]:
cx_Oracle.STRING
Natuurlijk moet u de cursor in dit tweede geval sluiten (in het eerste sluit orakel het). Het punt dat er geen manier is om een instantie zoals out = cx_Oracle.STRING()
te maken
Zoals ik al zei, het is niet erg elegant, maar ik denk niet dat er een manier is om een equivalente variabele te creëren in SQLAlchemy
. Het is iets dat de code intern afhandelt. Ik zou gewoon voor de onbewerkte verbindingscursor gaan.
Ik hoop dat het helpt.
EDIT2 :In de bovenstaande code is out.getvalue()
. toegevoegd zoals voorgesteld. Bedankt!