Python'un Win32 ODBC modülü kullanarak bir Oracle zaman damgası alınıyor

oy
2

Oracle tablo aşağıdaki kullanılarak oluşturulan Verilen:

CREATE TABLE Log(WhenAdded TIMESTAMP(6) WITH TIME ZONE);

Onun Python ODBC modülünü kullanarak Win32 uzantıları (win32all paketinden), şu çalıştı:

import dbi, odbc

connection = odbc.odbc(Driver=Oracle in OraHome92;Dbq=SERVER;Uid=USER;Pwd=PASSWD)

cursor = connection.cursor()
cursor.execute(SELECT WhenAdded FROM Log)

results = cursor.fetchall()

Bunu çalıştırdığınızda, aşağıdaki alıyorum:

Traceback (most recent call last):
...
    results = cursor.fetchall()
dbi.operation-error: [Oracle][ODBC][Ora]ORA-00932: inconsistent datatypes: expected %s got %s 
in FETCH

Ben denedim diğer veri türleri (VARCHAR2, BLOB) bu soruna neden olmaz. damgaları alınırken bir yolu var mı?

Oluştur 01/09/2008 saat 22:06
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
1

Bu Benim çözüm, ben daha iyisini umut olduğunu, açıkça bir dizeye ZAMAN dönüştürmek için Oracle kullanmaktır:

cursor.execute("SELECT TO_CHAR(WhenAdded, 'YYYY-MM-DD HH:MI:SSAM') FROM Log")

Bu çalışır, ancak taşınabilir değildir. Bir SQL Server veritabanına karşı aynı Python komut dosyasını kullanmak istiyorum, bu yüzden (örneğin to_char gibi) Oracle özgü çözüm çalışmayacaktır.

Cevap 01/09/2008 saat 22:14
kaynak kullanıcı

oy
2

Bu Oracle ODBC sürücüsü bir hata olduğunu düşünüyoruz. Temel olarak, Oracle ODBC sürücüsü desteklemediği TIMESTAMP WITH (LOCAL) TIME ZONEveri türlerini, yalnızca TIMESTAMPveri türü. Eğer keşfettim olarak, bir geçici çözüm kullanmak aslında TO_CHARyöntemini.

Örnekte aslında saat dilimi bilgilerini okuma değildir. Tabloda kontrolünü varsa düz dönüştürmek olabilir TIMESTAMPsütununda. Tabloda üzerinde kontrolü yoksa, başka bir çözüm dan dönüştüren bir görünüm oluşturmak olabilir TIMESTAMP WITH TIME ZONEiçin TIMESTAMPbir dize yoluyla - doğrudan dönüştürmek için bir yol olup olmadığını üzgünüm, ben bilmiyorum TIMESTAMP WITH TIME ZONEiçin TIMESTAMP.

Cevap 02/09/2008 saat 03:33
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more