We are upgrading from 0.9.7 to 1.1.9 and I've run into a bit of a problem with the upgrade.
I have a query which is based on a .select_from() and .join() so the mapping doesn't really exist from a single model. All of the fields have labels though and the result set produces the right results. The problem comes from the return type of the results: def one_or_none(self): ret = list(self) l = len(ret) if l == 1: return ret[0] elif l == 0: return None else: raise orm_exc.MultipleResultsFound("Multiple rows were found for one_or_none()") When it returns ret[0] is not returning an exported sqlalchemy type. Before it would return a KeyedTuple or based on some of our code maybe even a RowProxy which we would use to control serialization to json for the response to the client. However, this new type is NOT a KeyTuple and therefore isinstance(obj, KeyedTuple) returns False and then our code fails. isinstance(obj, AbstractKeyedTuple) does return True, but that isn't one of the exported classes from sqlalchemy.util. isinstance(obj, _LW) returns True as well, but the same objections affect that type as well The actual class looks like: >>> obj.__class__ <class 'sqlalchemy.util._collections.result'> I could fix this by simply importing it from _collections, but that doesn't seem like the right solution. So, I'm wondering if this is a bug or if I'm just looking at the problem wrong. I could pick up on the presence of the keys() method and use that, but what if that conflicts with a field in the db. A shortened version of the query looks like this: return db.query(Account.name.label('account_name'), Account.id.label('id'), Account.id.label('account_id'), select([func.coalesce(func.sum(...).as_scalar().label('count'), not_(Account.disabled).label('enabled'), AccountStatus.name.label('account_status'), User.login, User.first_name, User.last_name, .select_from(Account)\ .join(User, User.id == Account.primary_user_id)\ .join(AccountStatus, Account.account_status_id == AccountStatus.id)\ .outerjoin(account_manager, Account.account_manager_user_id == account_manager.id) -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.