Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

sqlalchemy में लौटने के साथ कच्ची क्वेरी कैसे निष्पादित करें?

मैंने पोस्टग्रेज में एक टॉय टेबल के साथ यह कोशिश की है और यह काम करता है, मुझे लगता है कि ओरेकल में समकक्ष होना चाहिए, कृपया मुझे बताएं।

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 . बनाने का कोई तरीका है उदाहरण के लिए, यह एपीआई में उपलब्ध नहीं है, docs

फिर, कर्सर बनाने से बचने का कोई तरीका नहीं है, भले ही यह तब काम करता हो जब आप 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

बेशक, आपको इस दूसरे मामले में कर्सर को बंद करना चाहिए (पहले वाले में, ऑरैकल इसे बंद कर देता है)। बात यह है कि out = cx_Oracle.STRING() जैसा इंस्टेंस बनाने का कोई तरीका नहीं है।

जैसा कि मैंने कहा, यह बहुत ही सुरुचिपूर्ण नहीं है, लेकिन मुझे नहीं लगता कि SQLAlchemy में एक समान चर बनाने का कोई तरीका है . यह ऐसा कुछ है जो कोड आंतरिक रूप से संभालता है। मैं सिर्फ कच्चे कनेक्शन-कर्सर के लिए जाऊंगा।

आशा है कि यह मदद करता है।

EDIT2 :उपरोक्त कोड में, जोड़ा गया 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. संग्रह विधि:Oracle डेटाबेस में DELETE प्रक्रिया

  2. LIKE (SQL) के साथ तालिकाओं में शामिल होना

  3. Async I/O गहन कोड गैर-async की तुलना में धीमा चल रहा है, क्यों?

  4. Oracle SQL में अज्ञात नामस्थानों के साथ XML को पार्स करना

  5. web.config asp.net में oracle डेटाबेस कनेक्शन