Keine Vebrindung zu Oracle via SQLAlchemy

Django, Flask, Bottle, WSGI, CGI…
Antworten
moehre
User
Beiträge: 39
Registriert: Donnerstag 21. April 2016, 13:50

Hallo,

ich kann keine Verbindung zu Oracle 11g herstellen und weiß nicht wo der Fehler ist.
Ich benutze Python 2.7

Hier mein Code:

Code: Alles auswählen

from sqlalchemy import *
import cx_Oracle

engine = create_engine('oracle+cx_oracle://TEST_3D:XXX@entwdb:1521/sdetest')

conn = engine.connect()
Fehlermeldung: cx_Oracle.DatabaseError) ORA-24315: Unzulässiger Attributtyp!

Ich habe auch das zusäzliche cx_Oracel Modul heruntergeladen und installiert. Der Import im Skript funktioniert ja...
In PostgreSQL funktioniert das ganze. Nur in Oracle kommt die Fehlermeldung.
Der einzige Unterschied ist das die DB in Oracle remote liegt und PostgreSQL lokal auf dem Rechner. Aber das sollte doch kein großer Unterschied sein oder?
BlackJack

@moehre: Kannst Du Dich denn mit `cx_Oracle`, also ohne SQLAlchemy mit der Datenbank verbinden? Falls das geht liegt das Problem bei SQLAlchemy, falls das nicht geht, ist SQLAlchemy nicht die Problemquelle.
moehre
User
Beiträge: 39
Registriert: Donnerstag 21. April 2016, 13:50

Meinst du so:

Code: Alles auswählen

import cx_Oracle
connstr = 'TEST_3D/tpassw@entwdb:1521/sdetest'
conn = cx_Oracle.connect(connstr)
Das funktioniert nämlich schon nicht. Da steht:
"ORA-12154: TNS: Angegebener Connect Identifier konnte nicht aufgelöst werden"

Um sicherzugehen nochmal die Syntax: 'USER/Passwort@host:1521/sid'. Ist das korrekt???
BlackJack

@moehre: Ich denke nicht, aber da muss man wohl mehr Ahnung von Oracle haben als ich. Die `cx_Oracle`-Dokumentation spricht von

„The dsn (data source name) is the TNS entry (from the Oracle names server or tnsnames.ora file) or is a string like the one returned from makedsn(). If only one parameter is passed, a connect string is assumed which is to be of the format user/password@dsn, the same format accepted by Oracle applications such as SQL*Plus.“

DSN, TNS, SID — die werfen da ja nur so mit lustigen Abkürzungen um sich. Wenn man sich anschaut was `makedsn()` zurück gibt — das sieht deutlich komplexer aus als 'host:1521/sid'. Das ist eher sowas wie (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521)))(CONNECT_DATA=(SID=sid))). Deswegen gibt's wohl die Funktion `makedsn()`. :-)
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ich habe auch keine Ahnung von Oracle, aber dieser Thread http://stackoverflow.com/questions/1414 ... sqlalchemy bei SO zeigt, wie es geht (bzw. gehen soll). Wonach der Ansatz von BlackJack wohl in der Tat schon richtig ist.

Gruß, noisefloor
moehre
User
Beiträge: 39
Registriert: Donnerstag 21. April 2016, 13:50

Ok it is done!
My Path variable was wrong.

Now I can connect with this command:

Code: Alles auswählen

import cx_Oracle
from sqlalchemy import create_engine

[engine = create_engine('oracle+cx_oracle://TEST_3D:limo1013@10.40.33.160:1521/sdetest')
conn = engine.connect()
Antworten