Manlio Perillo wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi. > > It seems there is a bug with SQL CASE support in SQLAlchemy (I'm testing > using trunk). > > Here is the original SQL statements: > > CREATE TABLE test ( > x INTEGER PRIMARY KEY > ); > > SELECT > CASE WHEN 'true' > THEN (SELECT EXISTS (SELECT x FROM test)) > END; > > > And here is the Python code: > > from sqlalchemy import schema, types, sql, create_engine > > metadata = schema.MetaData() > test = schema.Table( > 'test', metadata, > schema.Column('x', types.Integer, primary_key=True) > ) > > engine = create_engine('sqlite://') > > subquery = sql.exists(test.select().as_scalar()) > clause = sql.case([(True, subquery.select().as_scalar)]) > query = clause.select() > > engine.execute(query)
its more SQLA not warning you about an argument it doesn't like and then it leading into problems. it should raise an error earlier. basically exists() is like a select() and accepts the list of column expressions as a list. if you were to pass your select inside of a [], you'd get a valid SQL expression, though with two levels of "select". sql.exists([test]) or exists().select_from(test) would be more effective. ill try to catch that issue now. > > > I get an error: > > Traceback (most recent call last): > File "case.py", line 13, in <module> > subquery = sql.exists(test.select().as_scalar()) > File > "/usr/local/lib/python2.5/site-packages/sqlalchemy/sql/expression.py", > line 520, in exists > return _Exists(*args, **kwargs) > File > "/usr/local/lib/python2.5/site-packages/sqlalchemy/sql/expression.py", > line 2688, in __init__ > s = select(*args, **kwargs).as_scalar().self_group() > File > "/usr/local/lib/python2.5/site-packages/sqlalchemy/sql/expression.py", > line 238, in select > return Select(columns, whereclause=whereclause, from_obj=from_obj, > **kwargs) > File > "/usr/local/lib/python2.5/site-packages/sqlalchemy/sql/expression.py", > line 3492, in __init__ > if columns: > File > "/usr/local/lib/python2.5/site-packages/sqlalchemy/sql/expression.py", > line 1289, in __nonzero__ > raise TypeError("Boolean value of this clause is not defined") > TypeError: Boolean value of this clause is not defined > > > I'm not sure if my code is correct. > If it is not correct, what it the correct method to define that query? > > > > Thanks Manlio > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.10 (GNU/Linux) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > iEYEARECAAYFAkth7S4ACgkQscQJ24LbaUQEXgCggBUV3orSFAPPK155cVHplpb4 > 3U0An1djFkgt3LE6LHQOCHrepVt4F0Vc > =hL1p > -----END PGP SIGNATURE----- > > -- > 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. > > -- 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.