Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách thực hiện một truy vấn thô với trả về trong sqlalchemy

Tôi đã thử điều này với một bảng đồ chơi trong Postgres và nó hoạt động, tôi nghĩ nó phải tương đương trong Oracle, vui lòng cho tôi biết.

In [15]:

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

Hy vọng nó sẽ hữu ích.

CHỈNH SỬA cho Oracle :một cách để làm điều đó mà tôi thấy không được thanh lịch cho lắm. Nó sẽ sử dụng kết nối thô bên dưới SQLAlchemy kết nối, một cái gì đó như:

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

Rất tiếc, tôi không nghĩ có cách tạo cx_oracle variable ví dụ, nó không có sẵn trong api, hãy xem tài liệu .

Sau đó, không có cách nào để tránh việc tạo con trỏ, ngay cả khi con trỏ hoạt động khi bạn ủy quyền nhiều hơn cho 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

Tất nhiên, bạn nên đóng con trỏ trong trường hợp thứ hai này (trong trường hợp đầu tiên, oracle đóng nó). Vấn đề là không có cách nào để tạo một phiên bản như out = cx_Oracle.STRING()

Như tôi đã nói, nó không đẹp lắm, nhưng tôi không nghĩ có cách nào để tạo một biến tương đương trong SQLAlchemy . Nó là một cái gì đó mà mã xử lý nội bộ. Tôi chỉ sử dụng con trỏ kết nối thô.

Hy vọng nó sẽ hữu ích.

EDIT2 :Trong đoạn mã trên, đã thêm out.getvalue() như đề xuất. Cảm ơn!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để xử lý null trong câu lệnh NOT IN và NOT LIKE trong Oracle?

  2. Oracle:SQL chọn ngày với dấu thời gian

  3. Trình tự Oracle không tạo ra số liên tục

  4. Cảnh báo thời gian chờ đợi dành cho cơ sở dữ liệu EM12c

  5. Đã chỉ định URL Oracle không hợp lệ:OracleDataSource.makeURL