sql >> Databáze >  >> RDS >> Oracle

Jak provést nezpracovaný dotaz s návratem v sqlalchemy

Zkoušel jsem to se stolkem na hračky v Postgres a funguje to, myslím, že by to mělo být ekvivalentní v Oracle, dejte mi prosím vědět.

In [15]:

result = session.connection().execute("insert into usertable values('m6', 'kk2', 'Chile') returning username")
for r in result:
    print r
(u'm6',)

Doufám, že to pomůže.

UPRAVIT pro Oracle :Jediný způsob, jak to udělat, který jsem našel, není příliš elegantní. Používalo by to nezpracované připojení pod SQLAlchemy připojení, něco jako:

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

Bohužel si nemyslím, že existuje způsob, jak vytvořit cx_oracle variable například není k dispozici v rozhraní API, viz docs .

Pak neexistuje způsob, jak se vyhnout vytvoření kurzoru, i když to funguje, když delegujete více na 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

V tomto druhém případě byste samozřejmě měli zavřít kurzor (v prvním případě jej zavře oracle). Pointa, že neexistuje způsob, jak vytvořit instanci jako out = cx_Oracle.STRING()

Jak říkám, není to moc elegantní, ale nemyslím si, že existuje způsob, jak vytvořit ekvivalentní proměnnou v SQLAlchemy . Je to něco, co kód zpracovává interně. Šel bych jen pro nezpracovaný kurzor připojení.

Doufám, že to pomůže.

UPRAVIT2 :Do výše uvedeného kódu bylo přidáno out.getvalue() jak bylo navrženo. Díky!



  1. Výstup všech chyb PHP do databáze není error_log

  2. Jak se dotazovat SQL na souřadnice nejbližší bodu?

  3. Jak mám importovat data z CSV do tabulky Postgres pomocí pgAdmin 3?

  4. Jak vypsat pouze konkrétní tabulky z MySQL?