Seite 1 von 1

Keine Vebrindung zu Oracle via SQLAlchemy

Verfasst: Freitag 8. Juli 2016, 14:20
von moehre
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?

Re: Keine Vebrindung zu Oracle via SQLAlchemy

Verfasst: Freitag 8. Juli 2016, 14:49
von 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.

Re: Keine Vebrindung zu Oracle via SQLAlchemy

Verfasst: Freitag 8. Juli 2016, 15:04
von moehre
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???

Re: Keine Vebrindung zu Oracle via SQLAlchemy

Verfasst: Freitag 8. Juli 2016, 15:42
von 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()`. :-)

Re: Keine Vebrindung zu Oracle via SQLAlchemy

Verfasst: Samstag 9. Juli 2016, 19:12
von noisefloor
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

Re: Keine Vebrindung zu Oracle via SQLAlchemy

Verfasst: Montag 11. Juli 2016, 14:58
von moehre
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()