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 <k...@retailarchitects.com> wrote: >> Sorry, posted too quickly, I'll get the rest of the results you asked >> about... >> >> On May 17, 4:56 pm, Kent <k...@retailarchitects.com> 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 <mike...@zzzcomputing.com> 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 sqlalch...@googlegroups.com. >>>>> To unsubscribe from this group, send email to >>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>> 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 sqlalch...@googlegroups.com. >>>> To unsubscribe from this group, send email to >>>> sqlalchemy+unsubscr...@googlegroups.com. >>>> 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 sqlalch...@googlegroups.com. >>> To unsubscribe from this group, send email to >>> sqlalchemy+unsubscr...@googlegroups.com. >>> 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 sqlalch...@googlegroups.com. >> To unsubscribe from this group, send email to >> sqlalchemy+unsubscr...@googlegroups.com. >> 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 sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > 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 sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.