[Sqlalchemy-tickets] Issue #3372: SQLAlchemy 1.0.0 tries to process type value when not expected (z
Brought to you by:
zzzeek
|
From: Charles-Axel D. <iss...@bi...> - 2015-04-20 20:06:53
|
New issue 3372: SQLAlchemy 1.0.0 tries to process type value when not expected https://bitbucket.org/zzzeek/sqlalchemy/issue/3372/sqlalchemy-100-tries-to-process-type-value Charles-Axel Dein: Attached is the code to reproduce the error. Works fine with 0.9.9, fails with 1.0.0 ``` ca@CAMBPB Downloads (chariots) % python poc_sqla_uuid.py 2015-04-20 13:02:42,846 INFO sqlalchemy.engine.base.Engine select version() 2015-04-20 13:02:42,847 INFO sqlalchemy.engine.base.Engine {} 2015-04-20 13:02:42,848 INFO sqlalchemy.engine.base.Engine select current_schema() 2015-04-20 13:02:42,848 INFO sqlalchemy.engine.base.Engine {} 2015-04-20 13:02:42,850 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 2015-04-20 13:02:42,850 INFO sqlalchemy.engine.base.Engine {} 2015-04-20 13:02:42,851 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1 2015-04-20 13:02:42,851 INFO sqlalchemy.engine.base.Engine {} 2015-04-20 13:02:42,852 INFO sqlalchemy.engine.base.Engine show standard_conforming_strings 2015-04-20 13:02:42,852 INFO sqlalchemy.engine.base.Engine {} 2015-04-20 13:02:42,854 INFO sqlalchemy.engine.base.Engine select relname from pg_class c join pg_namespace n on n.oid=c.relnamespace where n.nspname=current_schema() and relname=%(name)s 2015-04-20 13:02:42,854 INFO sqlalchemy.engine.base.Engine {'name': u'users'} 2015-04-20 13:02:42,856 INFO sqlalchemy.engine.base.Engine SELECT EXISTS (SELECT * FROM users WHERE users.uuid = %(uuid_1)s) 2015-04-20 13:02:42,857 INFO sqlalchemy.engine.base.Engine {'uuid_1': UUID('863599a9-05af-498e-ac8b-f593aec85f3b')} ca@CAMBPB Downloads (chariots) % pip install sqlalchemy==1.0.0 ... ca@CAMBPB Downloads (chariots) % python poc_sqla_uuid.py 2015-04-20 13:02:59,597 INFO sqlalchemy.engine.base.Engine select version() 2015-04-20 13:02:59,597 INFO sqlalchemy.engine.base.Engine {} 2015-04-20 13:02:59,598 INFO sqlalchemy.engine.base.Engine select current_schema() 2015-04-20 13:02:59,598 INFO sqlalchemy.engine.base.Engine {} 2015-04-20 13:02:59,599 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 2015-04-20 13:02:59,599 INFO sqlalchemy.engine.base.Engine {} 2015-04-20 13:02:59,600 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1 2015-04-20 13:02:59,600 INFO sqlalchemy.engine.base.Engine {} 2015-04-20 13:02:59,601 INFO sqlalchemy.engine.base.Engine show standard_conforming_strings 2015-04-20 13:02:59,601 INFO sqlalchemy.engine.base.Engine {} 2015-04-20 13:02:59,602 INFO sqlalchemy.engine.base.Engine select relname from pg_class c join pg_namespace n on n.oid=c.relnamespace where pg_catalog.pg_table_is_visible(c.oid) and relname=%(name)s 2015-04-20 13:02:59,602 INFO sqlalchemy.engine.base.Engine {'name': u'users'} 2015-04-20 13:02:59,605 INFO sqlalchemy.engine.base.Engine SELECT EXISTS (SELECT * FROM users WHERE users.uuid = %(uuid_1)s) 2015-04-20 13:02:59,605 INFO sqlalchemy.engine.base.Engine {'uuid_1': UUID('66d2e759-3c42-47b5-906d-90df8456cc76')} Traceback (most recent call last): File "poc_sqla_uuid.py", line 35, in <module> main() File "poc_sqla_uuid.py", line 32, in main conn.execute(query).scalar() File "/Users/ca/.virtualenvs/chariots/lib/python2.7/site-packages/sqlalchemy/engine/result.py", line 1053, in scalar return row[0] File "/Users/ca/.virtualenvs/chariots/lib/python2.7/site-packages/sqlalchemy/sql/type_api.py", line 979, in process return process_value(impl_processor(value), dialect) File "/Users/ca/.virtualenvs/chariots/lib/python2.7/site-packages/sqlalchemy_utils/types/uuid.py", line 76, in process_result_value return uuid.UUID(value) File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/uuid.py", line 134, in __init__ raise ValueError('badly formed hexadecimal UUID string') ValueError: badly formed hexadecimal UUID string ``` This fails because value is `False` (it's an exists query). Not sure why sqlalchemy tries to parse it as a UUID. Using sqlachemy 0.9.9 (works) and 1.0.0 (does not work), sqlalchemy-utils (0.30.0). |