[Sqlalchemy-tickets] [sqlalchemy] #2776: OracleDialect.initialize() KeyError with Oracle 8i
Brought to you by:
zzzeek
|
From: sqlalchemy <mi...@zz...> - 2013-07-09 18:07:16
|
#2776: OracleDialect.initialize() KeyError with Oracle 8i
-----------------------+-----------------------------------------
Reporter: kentbower | Owner: zzzeek
Type: defect | Status: new
Priority: medium | Milestone:
Component: oracle | Severity: no triage selected yet
Keywords: | Progress State: awaiting triage
-----------------------+-----------------------------------------
Occasionally we've hit this `KeyError` with Oracle 8i:
{{{
return Query.__iter__(self)
File 'build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py', line 2205 in
__iter__
File 'build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py', line 2218 in
_execute_and_instances
File 'build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py', line 2209 in
_connection_from_session
File 'build/bdist.linux-x86_64/egg/sqlalchemy/orm/session.py', line 732 in
connection
File 'build/bdist.linux-x86_64/egg/sqlalchemy/orm/session.py', line 736 in
_connection_for_bind
File 'build/bdist.linux-x86_64/egg/sqlalchemy/orm/session.py', line 266 in
_connection_for_bind
File 'build/bdist.linux-x86_64/egg/sqlalchemy/engine/base.py', line 2476
in contextual_connect
File 'build/bdist.linux-x86_64/egg/sqlalchemy/pool.py', line 224 in
connect
File 'build/bdist.linux-x86_64/egg/sqlalchemy/pool.py', line 387 in
__init__
File 'build/bdist.linux-x86_64/egg/sqlalchemy/pool.py', line 739 in
_do_get
File 'build/bdist.linux-x86_64/egg/sqlalchemy/pool.py', line 188 in
_create_connection
File 'build/bdist.linux-x86_64/egg/sqlalchemy/pool.py', line 273 in
__init__
File 'build/bdist.linux-x86_64/egg/sqlalchemy/event.py', line 282 in
exec_once
File 'build/bdist.linux-x86_64/egg/sqlalchemy/event.py', line 291 in
__call__
File 'build/bdist.linux-x86_64/egg/sqlalchemy/engine/strategies.py', line
167 in first_connect
File 'build/bdist.linux-
x86_64/egg/sqlalchemy/dialects/oracle/cx_oracle.py', line 564 in
initialize
File 'build/bdist.linux-x86_64/egg/sqlalchemy/dialects/oracle/base.py',
line 696 in initialize
KeyError: <class 'sqlalchemy.types.Interval'>
}}}
The `initialize()` code is here:
{{{
#!python
def initialize(self, connection):
super(OracleDialect, self).initialize(connection)
self.implicit_returning = self.__dict__.get(
'implicit_returning',
self.server_version_info > (10, )
)
if self._is_oracle_8:
self.colspecs = self.colspecs.copy()
self.colspecs.pop(sqltypes.Interval)
self.use_ansi = False
}}}
Question: is there a legitimate reason to be inside `initialize()` more
than once? Apparently that is what has happened here because the
.pop(sqltypes.Interval) has already been run on self.colspecs.
I'm guessing the real problem is with the connection pool or something and
sqlalchemy thinks it needs to initialize this since it isn't properly
connected?
--
Ticket URL: <http://www.sqlalchemy.org/trac/ticket/2776>
sqlalchemy <http://www.sqlalchemy.org/>
The Database Toolkit for Python
|