2010-01-06 42 views
5

Vâng, tôi hy vọng đây không phải là bản sao, tìm kiếm không mang lại bất kỳ điều gì hữu ích.Thay đổi lược đồ bằng cách sử dụng cx_Oracle

Tôi đã từng đùa giỡn với cx_Oracle trong vài ngày qua, cài đặt và sử dụng nó. Mọi thứ đều tốt đẹp cho đến khi tôi đạt đến vấn đề hiện tại của mình: Tôi muốn thay đổi lược đồ của mình. Nếu tôi đang sử dụng sqlplus một 'phiên làm thay đổi tập hợp current_schema = toto' đơn giản; sẽ làm, nhưng tôi không biết làm thế nào để có được xung quanh nó với cx_Oracle.

Tôi đã tải xuống phiên bản nguồn mới nhất: cx_Oracle-5.0.2.tar.gz.

Theo việc thay đổi lược đồ documentation là một trường hợp đơn giản về thiết lập Connection.current_schema phải là thuộc tính ghi đọc ... sự cố là đối tượng Connection của tôi không có thuộc tính current_schema.

>>> c = cx_Oracle.connect(...) 
>>> dir(c) 
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', 
'__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', 
'__subclasshook__', 'autocommit', 'begin', 'cancel', 'changepassword', 'close', 
'commit', 'cursor', 'dsn', 'encoding', 'inputtypehandler', 
'maxBytesPerCharacter', 'nencoding', 'outputtypehandler', 'password', 'prepare', 
'register', 'rollback', 'stmtcachesize', 'tnsentry', 'unregister', 'username', 
'version'] 

Đang cố gắng để thiết lập các thuộc tính sử dụng

>>> c.current_schema = 'toto' 

kết quả trong một lỗi ... __setattr__ đã rõ ràng được ghi đè để ngăn chặn nó.

Vì vậy, ... có ai biết làm cách nào không?


Đây là lỗi tôi gặp phải.

>>> c.current_schema = 'toto' 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
AttributeError: 'cx_Oracle.Connection' object has no attribute 'current_schema' 

>>> setattr(c, 'current_schema', 'toto') 
# same error 

Và đây là các thông tin về hệ điều hành và python:

SUSE LINUX Enterprise Server 9 (x86_64) 
VERSION = 9 
PATCHLEVEL = 3 

Và tôi sử dụng python 2.6.2 (biên soạn cho 64bits)

Tôi cũng biên soạn cx_Oracle cho 64bits, trên rất cùng một máy.

+0

Không tồn tại dưới dạng thuộc tính hiển thị không có nghĩa là nhiều. '__setattr__' có thể được ghi đè để thực hiện nó theo một cách bí ẩn nào đó. Điều quan trọng hơn 'dir (c)' là lỗi thực sự bạn thực sự có khi bạn thực sự đã làm 'c.current_schema = 'toto''. –

Trả lời

6

Được rồi, cuối cùng, sau nhiều lần thử và lỗi, hãy theo dõi fn đề xuất và điều tra bên trong cx_Oracle để tìm điều gì sai.

Nó chỉ ra rằng một số lập luận và phương pháp chỉ có sẵn thông qua một số cờ:

  • WITH_UNICODE kích hoạt encodingnencoding thuộc tính
  • ORACLE_10G kích hoạt action, module, clientinfocurrent_schema

Tôi đã kiểm tra và phát hiện ra rằng tôi đã biên soạn cx_Oracle so với phiên bản 9 của khách hàng oracle ... vì vậy tôi đã biên dịch lại phiên bản 10.2.0.3 của ứng dụng khách oracle và bây giờ tôi có quyền truy cập vào các thuộc tính này.

Xấu hổ rằng hạn chế không được đặt trước trong tài liệu ... và tôi rất biết ơn rằng mã nguồn có sẵn.

2

Thử cài đặt lại cx_Oracle. Cx_Oracle của bạn có lẽ là sai lầm. Phiên bản hệ điều hành và python của bạn là gì?

+0

Tôi vừa mới cài đặt và không có phiên bản nào trước đó có thể can thiệp ... –

Các vấn đề liên quan