here's a patch. I can confirm the error with the server_version_info. But not sure what the actual cause of the ORA-12704 is. what cx_oracle version is it ?
On May 17, 2010, at 5:16 PM, Kent wrote:
> I think it is using the other select:
> ================================================================================
> Connected to:
> Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
> With the Partitioning option
> JServer Release 8.1.7.4.0 - Production
>
>
> Session altered.
>
> SQL> SELECT CAST('test unicode returns' AS VARCHAR(60 CHAR)) AS anon_1
> FROM DUAL
> 2 ;
> SELECT CAST('test unicode returns' AS VARCHAR(60 CHAR)) AS anon_1 FROM
> DUAL
> *
> ERROR at line 1:
> ORA-00907: missing right parenthesis
> ================================================================================
>
> It seems to be detecting the version correctly:
>
> -----------------------
> from sqlalchemy import *
>
> engine = create_engine('oracle://user:p...@ipaddress:1521/live?
> use_ansi=False',echo=True)
> try:
> engine.connect()
> except:
> # because we know its not working
> print 'exception caught'
> print engine.dialect.server_version_info
>
>
> (tg2env)[ra...@eld appserver]$ python ora8.py
> 2010-05-17 14:08:39,339 INFO sqlalchemy.engine.base.Engine.0x...db50
> SELECT USER FROM DUAL
> 2010-05-17 14:08:39,344 INFO sqlalchemy.engine.base.Engine.0x...db50
> {}
> exception caught
> (8, 1, 7, 4, 0)
> -----------------------
>
>
> Setting 'engine.dialect.supports_char_length = False' causes
> "ORA-12704: character set mismatch"
>
> =========================================================================
> try:
> engine.dialect.supports_char_length = False
> engine.connect()
> except Exception as e:
> # because we know its not working
> print str(e)
> print engine.dialect.server_version_info
> =========================================================================
>
> 2010-05-17 14:13:55,687 INFO sqlalchemy.engine.base.Engine.0x...fb50
> SELECT USER FROM DUAL
> 2010-05-17 14:13:55,690 INFO sqlalchemy.engine.base.Engine.0x...fb50
> {}
> ORA-12704: character set mismatch
>
> (8, 1, 7, 4, 0)
>
>
>
> On May 17, 4:58 pm, Kent <[email protected]> wrote:
>> Sorry, posted too quickly, I'll get the rest of the results you asked
>> about...
>>
>> On May 17, 4:56 pm, Kent <[email protected]> wrote:
>>
>>
>>
>>> Connected to:
>>> Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
>>> With the Partitioning option
>>> JServer Release 8.1.7.4.0 - Production
>>
>>> Session altered.
>>
>>> SQL> SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1 FROM
>>> DUAL
>>> 2 ;
>>
>>> ANON_1
>>> ------------------------------------------------------------
>>> test unicode returns
>>
>>> SQL>
>>
>>> On May 17, 4:47 pm, Michael Bayer <[email protected]> wrote:
>>
>>>> So there's a call upon first connect which is along the lines of:
>>
>>>> SELECT CAST('test unicode returns' AS VARCHAR(60 CHAR)) AS anon_1 FROM DUAL
>>
>>>> when you're on oracle 8, it should be checking server version, and coming
>>>> out as:
>>
>>>> SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1 FROM DUAL
>>
>>>> so step one is make sure the second statement works on Oracle 8. step
>>>> two, we'd have to make sure the server version detection is working. you
>>>> can force this particular case like:
>>
>>>> engine = create_engine('oracle://...')
>>>> engine.dialect.supports_char_length = False
>>
>>>> besides that, I'd like to see:
>>
>>>> engine = create_engine('oracle://...')
>>>> try:
>>>> engine.connect()
>>>> except:
>>>> # because we know its not working
>>>> pass
>>>> print engine.dialect.server_version_info
>>
>>>> this particular interaction doesn't go through regular SQLAlchemy logging.
>>>> If you really needed to see it occur you'd have to watch your oracle
>>>> query logs.
>>
>>>> On May 17, 2010, at 3:37 PM, Kent wrote:
>>
>>>>> After migrating to 0.6, we've got an apparently well running
>>>>> application for postgres and Oracle 9 or above. However, as soon as
>>>>> we connect to an Oracle 8 database, *everything* we attempt ends with
>>>>> this: oracle error: "ORA-00907: missing right parenthesis"
>>
>>>>> Here is an example trying to run a session query.......:
>>
>>>>>>>> DBSession.query(SystemParameter).all()
>>>>> 12:35:01,294 INFO [sqlalchemy.engine.base.Engine.0x...5650] SELECT
>>>>> USER FROM DUAL
>>>>> 12:35:01,294 INFO [sqlalchemy.engine.base.Engine.0x...5650] {}
>>>>> Traceback (most recent call last):
>>>>> File "<console>", line 1, in <module>
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/orm/query.py", line
>>>>> 1343, in all
>>>>> return list(self)
>>>>> File "/home/rarch/trunk/src/appserver/pylotengine/__init__.py", line
>>>>> 73, in __iter__
>>>>> return Query.__iter__(self)
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/orm/query.py", line
>>>>> 1451, in __iter__
>>>>> return self._execute_and_instances(context)
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/orm/query.py", line
>>>>> 1456, in _execute_and_instances
>>>>> mapper=self._mapper_zero_or_none())
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/orm/session.py",
>>>>> line 736, in execute
>>>>> return self._connection_for_bind(engine,
>>>>> close_with_result=True).execute(
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/orm/session.py",
>>>>> line 701, in _connection_for_bind
>>>>> return self.transaction._connection_for_bind(engine)
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/orm/session.py",
>>>>> line 319, in _connection_for_bind
>>>>> conn = bind.contextual_connect()
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py",
>>>>> line 1592, in contextual_connect
>>>>> return self.Connection(self, self.pool.connect(),
>>>>> close_with_result=close_with_result, **kwargs)
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/pool.py", line 154,
>>>>> in connect
>>>>> return _ConnectionFairy(self).checkout()
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/pool.py", line 318,
>>>>> in __init__
>>>>> rec = self._connection_record = pool.get()
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/pool.py", line 173,
>>>>> in get
>>>>> return self.do_get()
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/pool.py", line 665,
>>>>> in do_get
>>>>> con = self.create_connection()
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/pool.py", line 134,
>>>>> in create_connection
>>>>> return _ConnectionRecord(self)
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/pool.py", line 214,
>>>>> in __init__
>>>>> l.first_connect(self.connection, self)
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/engine/
>>>>> strategies.py", line 145, in first_connect
>>>>> dialect.initialize(c)
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/dialects/oracle/
>>>>> base.py", line 604, in initialize
>>>>> super(OracleDialect, self).initialize(connection)
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/engine/default.py",
>>>>> line 138, in initialize
>>>>> self.returns_unicode_strings =
>>>>> self._check_unicode_returns(connection)
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/engine/default.py",
>>>>> line 183, in _check_unicode_returns
>>>>> unicode_for_varchar = check_unicode(sqltypes.VARCHAR(60))
>>>>> File "/home/rarch/tg2env/lib/python2.6/site-packages/
>>>>> SQLAlchemy-0.6.0-py2.6-linux-x86_64.egg/sqlalchemy/engine/default.py",
>>>>> line 173, in check_unicode
>>>>> ]).compile(dialect=self)
>>>>> DatabaseError: ORA-00907: missing right parenthesis
>>
>>>>> Any ideas? Any logging we can enable to help figure this out?
>>
>>>>> Thanks in advance.
>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google Groups
>>>>> "sqlalchemy" group.
>>>>> To post to this group, send email to [email protected].
>>>>> To unsubscribe from this group, send email to
>>>>> [email protected].
>>>>> For more options, visit this group
>>>>> athttp://groups.google.com/group/sqlalchemy?hl=en.
>>
>>>> --
>>>> You received this message because you are subscribed to the Google Groups
>>>> "sqlalchemy" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected].
>>>> For more options, visit this group
>>>> athttp://groups.google.com/group/sqlalchemy?hl=en.
>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "sqlalchemy" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> For more options, visit this group
>>> athttp://groups.google.com/group/sqlalchemy?hl=en.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "sqlalchemy" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> For more options, visit this group
>> athttp://groups.google.com/group/sqlalchemy?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>
ora8_unicode.patch
Description: Binary data
-- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
