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.

Reply via email to