Saya sudah mencoba ini dengan tabel mainan di Postgres dan berhasil, saya pikir harus setara di Oracle, beri tahu saya.
In [15]:
result = session.connection().execute("insert into usertable values('m6', 'kk2', 'Chile') returning username")
for r in result:
print r
(u'm6',)
Semoga membantu.
EDIT untuk Oracle :satu-satunya cara untuk melakukannya yang saya temukan tidak terlalu elegan. Itu akan menggunakan koneksi mentah di bawah SQLAlchemy
koneksi, seperti:
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
Sayangnya, menurut saya tidak ada cara untuk membuat cx_oracle variable
misalnya, itu tidak tersedia di api, lihat dokumen .
Kemudian, tidak ada cara untuk menghindari pembuatan kursor, meskipun itu berfungsi saat Anda mendelegasikan lebih banyak ke 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
Tentu saja, Anda harus menutup kursor dalam kasus kedua ini (dalam kasus pertama, oracle menutupnya). Intinya tidak ada cara untuk membuat instance seperti out = cx_Oracle.STRING()
Seperti yang saya katakan, ini tidak terlalu elegan, tetapi saya rasa tidak ada cara untuk membuat variabel yang setara di SQLAlchemy
. Ini adalah sesuatu yang ditangani kode secara internal. Saya hanya akan memilih kursor koneksi mentah.
Semoga membantu.
EDIT2 :Pada kode di atas, ditambahkan out.getvalue()
seperti yang disarankan. Terima kasih!