Próbowałem tego z zabawkowym stolikiem w Postgresie i działa, myślę, że powinien być równoważny w Oracle, daj mi znać.
In [15]:
result = session.connection().execute("insert into usertable values('m6', 'kk2', 'Chile') returning username")
for r in result:
print r
(u'm6',)
Mam nadzieję, że to pomoże.
EDYTUJ dla Oracle :jedyny sposób na zrobienie tego, który znalazłem, nie jest zbyt elegancki. Byłoby to użycie surowego połączenia pod SQLAlchemy
połączenie, coś takiego:
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
Niestety nie sądzę, że istnieje sposób na utworzenie cx_oracle variable
na przykład nie jest dostępny w interfejsie API, zobacz dokumenty .
Wtedy nie ma sposobu, aby uniknąć tworzenia kursora, nawet jeśli działa, gdy delegujesz więcej do 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
Oczywiście w tym drugim przypadku należy zamknąć kursor (w pierwszym przypadku wyrocznia go zamyka). Punkt, w którym nie ma możliwości utworzenia instancji, takiej jak out = cx_Oracle.STRING()
Jak mówię, nie jest to zbyt eleganckie, ale nie sądzę, że istnieje sposób na utworzenie równoważnej zmiennej w SQLAlchemy
. Jest to coś, co kod obsługuje wewnętrznie. Wybrałbym po prostu surowy kursor połączenia.
Mam nadzieję, że to pomoże.
EDYTUJ2 :W powyższym kodzie dodano out.getvalue()
jak sugerowano. Dzięki!