Oracle 10g und sqlalchemy: InterfaceError

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Hallo zusammen!

Ich versuche, mit sqlalchemy auf eine Oracle 10g XE (auf openSuse 11.1, als rpm installiert) zuzugreifen. Ich nutze Python 2.6 und cx_Oracle 5.0.2, installiert per easy_install, das ging auch ganz gut, d.h die $ORACLE_HOME(/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/ entsprechend BUILD.txt vom cx_Oracle-Modul)
) und $LD_LIBRARY_PATH sollten richtig sein. Der Orale-Server läuft auch, d.h. ich kann mich über das Webfrontend auch einloggen (auch mit dem Nutzer der die Verbindung hinterher nutzen soll).
Wenn ich versuche mir SQLAlchemy eine Verbindung aufzubauen, passiert folgendes:

Code: Alles auswählen

sqlalchemy.exc.InterfaceError: (InterfaceError) Unable to acquire Oracle environment handle None None
Hat jemand Erfahrung damit? Bin selbst ein Oracle-Neuling, da ich sonst nur mit Postgres arbeite.

Viele Grüsse und Dank im Voraus

Uwe[/list]
---------------------------------
have a lot of fun!
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Der unten angefügte Testcode funktioniert.

Code: Alles auswählen

import cx_Oracle

def testora():
    orcl = cx_Oracle.connect('xxx/xxx@localhost:1521/XE')
    print orcl
    curs = orcl.cursor()
    result = curs.execute('SELECT * FROM TESTTABLE')
    for item in result:
        print item

if __name__ == '__main__':
    testora()
ratlose Grüsse

Uwe
---------------------------------
have a lot of fun!
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Wie versuchst du denn, die DB mit sqlalchemy aufzurufen? Vielleich kann dir dann jemand (ich nicht ;) ) besser helfen.
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Gute Idee ;)

Also ich hab mir mal ein kleines Modul (s.u) geschrieben das mir eine Connection und ein BAse-Objekt erstell, da ich ab und an modulübergreifende DB-Verbindungen haben will. Das funktioniert auch wunderbar mit Postgres und Sqlite, allerdings nicht mit Oracle. Die Verbindung über cx_Oracle lässt sich aber so auch herstellen, siehe oben.
Der Connectionstring sieht so aus:

Code: Alles auswählen

  con = 'oracle://xxx:xxx@localhost:1521/XE'
verschiedene Varianten der Groß- und Kleinschreibung hab ich schon probiert...

gruß Uwe

Code: Alles auswählen

#! /usr/bin/env/python
# coding: utf-8
#--------------------------------------------------------------------------------
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

def createSession(con=None):
    if  con:
        engine = create_engine(con, echo=True)
        print con    
        metadata = Base.metadata
        Session = sessionmaker(bind=engine)
        metadata.create_all(engine)
        session = Session()
        return session
    else:
        print 'no constring'

def getBase():
    return Base
---------------------------------
have a lot of fun!
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Neue Infos:

Damit das Ganze nicht zu langweilig wird: Im Moment nutze ich Eclipse und Pydev. Da ist es um nichts in der Welt zum laufen zu bewegen :evil: (Postgres und sqlite funktionieren wunderbar), in der shell läuft es ohne (Verbindungs-)Probleme :shock:

Also, Problem hat zumindest einen Workaround, Hinweise zu den beschriebenen Verhaltensweisen werden trotzdem gerne angenommen ;)

Grüsse und Danke fürs lesen

Uwe
---------------------------------
have a lot of fun!
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

So, fürs Protokoll und die Nachwelt: Das seltsame Verhalten lag daran, das $ORACLE_HOME und $LD_LIBRARY_PATH immer nur für die jeweilge Shellsession galt. Sozusagen also der Fehler saß mal wieder vorm Bildschirm ;)

CU UWe
---------------------------------
have a lot of fun!
Antworten