Hente en Oracle tidsstempel bruke Pythons Win32 ODBC modulen

stemmer
2

Gitt en Oracle tabellen er laget ved hjelp av følgende:

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

Ved hjelp av Python ODBC-modul fra dens Win32 utvidelser (fra win32all pakken), prøvde følgende:

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()

Når jeg kjører denne, får jeg følgende:

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

De andre datatyper jeg har prøvd (VARCHAR2, BLOB) ikke forårsake dette problemet. Er det en måte å hente tidsstempler?

Publisert på 01/09/2008 klokken 21:06
kilden bruker
På andre språk...                            


2 svar

stemmer
2

Jeg tror dette er en feil i Oracle ODBC driver. I utgangspunktet betyr Oracle ODBC driveren støtter ikke TIMESTAMP WITH (LOCAL) TIME ZONEdatatyper, bare TIMESTAMPdatatype. Som du har oppdaget, er en midlertidig løsning faktisk å bruke TO_CHARmetoden.

I ditt eksempel du faktisk ikke leser tidssoneinformasjonen. Hvis du har kontroll over bordet du kan konvertere den til en rett TIMESTAMPkolonne. Hvis du ikke har kontroll over bordet, kan en annen løsning være å lage en visning som konverterer fra TIMESTAMP WITH TIME ZONEtil TIMESTAMPvia en streng - beklager, jeg vet ikke om det er en måte å konvertere direkte fra TIMESTAMP WITH TIME ZONEtil TIMESTAMP.

Svarte 02/09/2008 kl. 02:33
kilden bruker

stemmer
1

Min løsning på dette, som jeg håper kan bli bedret, er å bruke Oracle eksplisitt konvertere TIMESTAMP til en streng:

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

Dette fungerer, men er ikke bærbar. Jeg ønsker å bruke den samme Python-skript mot en SQL Server-database, slik at en Oracle-spesifikk løsning (for eksempel TO_CHAR) vil ikke fungere.

Svarte 01/09/2008 kl. 21:14
kilden bruker

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