Hi,

I have a join between 2 tables (User/Adresses, complete code below). I create a 
mapper as
the join of the 2 classes as:

m = orm.mapper(Join, User.__table__.outerjoin(Address.__table__) ,
               properties = {
                   'j_id' : [Address.__table__.c.user_id, User.__table__.c.id ]
               }
               )

Now I run the query sess.query(m).all() and get:

   [<Join sandro ([email protected])>, None]

I don't really understand why one row is None, it's clearly the row that has
a user w/o address, the row that I want to see (otherwise I would have just
used join).

I guess my problem is in the way I setup the mapper but I can't understand
how I should configure it. I read
http://www.sqlalchemy.org/docs/orm/mapper_config.html#mapping-a-class-against-multiple-tables
but could not understand eather...

any hints?

thanks in advanced

*:-)


--------------------------------------------
The complete code of my example:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Table, Column, ForeignKey, text, func
from sqlalchemy.types import *
from sqlalchemy import orm 

Base = declarative_base()
Base.metadata.bind = 'sqlite://'
Session = orm.sessionmaker(bind=Base.metadata.bind) 
sess = Session()

class User(Base):
     __tablename__ = 'user'
     id = Column(Integer, primary_key=True)
     name               = Column(String(30), nullable=False)

class Address(Base):
     __tablename__ = 'address'
     aid            = Column(Integer, primary_key=True)
     address        = Column(String(30), nullable=True)
     user_id        = Column(ForeignKey(User.id), nullable=False)
     
     user = orm.relation(User, backref='addresses', lazy=False)

Base.metadata.create_all()

u = User(name='sandro')
b = User(name='bianco')

sess.add(u)
sess.add(b)

sess.commit()

a = Address(address='[email protected]', )
a.user = u
sess.add(a)
sess.commit()

class Join(object):
     def __repr__(self):
          return "<Join %s (%s)>" % (self.name, getattr(self, 'address', None))

m = orm.mapper(Join, User.__table__.outerjoin(Address.__table__) ,
               properties = {
                   'j_id' : [Address.__table__.c.user_id, User.__table__.c.id ]
               }
               )

q = sess.query(m)
print q.all()




-- 
Sandro Dentella  *:-)
http://www.reteisi.org             Soluzioni libere per le scuole
http://sqlkit.argolinux.org        SQLkit home page - PyGTK/python/sqlalchemy

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to