Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да изпълним необработена заявка с връщане в sqlalchemy

Опитах това с маса за играчки в 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 :единственият начин да го направя, който открих, не е много елегантен. Ще се използва необработената връзка под 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

Разбира се, трябва да затворите курсора във втория случай (в първия Oracle го затваря). Въпросът е, че няма начин да се създаде екземпляр като out = cx_Oracle.STRING()

Както казах, не е много елегантно, но не мисля, че има начин да се създаде еквивалентна променлива в SQLAlchemy . Това е нещо, което кодът обработва вътрешно. Просто бих избрал необработения курсор за връзка.

Надявам се да помогне.

РЕДАКТИРАНЕ 2 :В горния код е добавен out.getvalue() както е предложено. Благодаря!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите данни от pl/sql функция, ако даден параметър има повече от една стойност във функция с единични параметри

  2. ORA-01008:не всички променливи са обвързани. Те са обвързани

  3. Как да създадете изглед с помощта на динамично действие в APEX oracle?

  4. Как да репликирам схема със същите привилегии на съществуващ акаунт в Oracle?

  5. десетична(s,p) или число(s,p)?