cx_Oracle connection parameters user, password and dsn must be
either a string or NULL. When they are passed a Python None object,
"TypeError: expecting string, unicode or buffer object" is raised.
Fixes: #3705
Change-Id: I8da5d8a227ca12c9bf17a6127460e413841951fb
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/271
:meth:`.Query.group_by` method would raise an error, instead
of intepreting the object as a SQL fragment.
+ .. change::
+ :tags: bug, oracle
+ :tickets: 3705
+
+ Fixed a bug in the cx_Oracle connect process that caused a TypeError
+ when the either the user, password or dsn was empty. This prevented
+ external authentication to Oracle databases, and prevented connecting
+ to the default dsn. The connect string oracle:// now logs into the
+ default dsn using the Operating System username, equivalent to
+ connecting using '/' with sqlplus.
+
.. change::
:tags: bug, oracle
:tickets: 3699
dsn = url.host
opts = dict(
- user=url.username,
- password=url.password,
- dsn=dsn,
threaded=self.threaded,
twophase=self.allow_twophase,
)
+ if dsn is not None:
+ opts['dsn'] = dsn
+ if url.password is not None:
+ opts['password'] = url.password
+ if url.username is not None:
+ opts['user'] = url.username
+
if util.py2k:
if self._cx_oracle_with_unicode:
for k, v in opts.items():