sqlalchemy
を使用してOracle DBに接続しようとしています。正確な構文がsqlalchemy documentationに表示されているとすれば、私は次のことを期待していました。Python - sqlalchemy - Oracle接続がSIDへの接続に失敗する
oracle_db = sqlalchemy.create_engine('oracle://user:[email protected]:1521/dev')
が、これはエラーになり:
dsn = self.dbapi.makedsn(url.host, port, **makedsn_kwargs) TypeError: makedsn() takes no keyword arguments
次の呼び出しは、最初にサービス名
oracle_db = sqlalchemy.create_engine('oracle://user:[email protected]:1521')
せずに動作しますが、接続しようとすると、それがあることを訴えてエラーで失敗しますSERVICE_NAME
は提供されませんでした。
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA
奇妙なことに、これは直接cx_Oracle
で動作します:
con = cx_Oracle.connect('user/[email protected]:1521/dev')
はどのようにして、特定のサービスに接続することが出来るのですか?私も運とthis questionから明示的にcx_Oracle.makedsn()
を使用しようとしました
試み
。
oracle_db = sqlalchemy.create_engine('oracle://user:[email protected]:1521/?sid=dev')
作品最初は接続文字列で?
オプションを使用しようとするが、私はoracle_db.connect()
をしようとすると、私は上記のように同じORA-12504
エラーを取得します。
私は両方を試してみました。最初に 'TypeError:makedsn()はキーワード引数を取らず'となり、 'connect 'しようとすると' SERVICE_NAME'エラーが返されませんでした。 – cdeterman
実際にtns_namesエントリ。例については、[http://www.oracle.com/technetwork/articles/dsl/prez-python-queries-101587.html]を参照してください。 –
tns_namesは機能するかもしれませんが、すぐに利用できるものはありません。私はなぜ 'cx_Oracle'に直接近い文字列が' sqlalchemy'に渡されたのか理解できません。 – cdeterman