Postgresのおもちゃのテーブルでこれを試しましたが、動作します。Oracleでも同等のはずです。教えてください。
In [15]:
result = session.connection().execute("insert into usertable values('m6', 'kk2', 'Chile') returning username")
for r in result:
print r
(u'm6',)
お役に立てば幸いです。
Oracle用に編集 :私が見つけたそれを行う1つの方法は、あまりエレガントではありません。 SQLAlchemy
の下の生の接続を使用します 接続、次のようなもの:
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
残念ながら、cx_oracle variable
を作成する方法はないと思います。 たとえば、APIでは使用できません。
その場合、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
もちろん、この2番目のケースではカーソルを閉じる必要があります(最初のケースでは、oracleがカーソルを閉じます)。 out = cx_Oracle.STRING()
のようなインスタンスを作成する方法がないという点
私が言っているように、それはあまりエレガントではありませんが、SQLAlchemy
で同等の変数を作成する方法はないと思います 。これは、コードが内部で処理するものです。生の接続カーソルを選択します。
お役に立てば幸いです。
編集2 :上記のコードで、out.getvalue()
を追加しました 提案されたように。ありがとう!