Вы можете использовать функцию соединения, предоставляемую sqlalchemy, см. Пример ниже, нет необходимости делать это вручную, sqlalchme делает это за нас,
from sqlalchemy import create_engine, Column, String, Integer, Table, ForeignKey
from sqlalchemy.orm import mapper, relationship
from sqlalchemy.schema import MetaData
from sqlalchemy.orm.session import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column('user_id',Integer,primary_key = True)
name = Column('user_name',String(20))
addresses = relationship("Address",backref="user")
class Address(Base):
__tablename__ = 'addresses'
id = Column('user_id',ForeignKey('users.user_id'))
address = Column('address',String(30))
pk = Column('address_id',Integer,primary_key=1)
if __name__ == "__main__":
engine = create_engine("sqlite://", echo = True)
Base.metadata.create_all(engine)
session = sessionmaker(bind=engine)()
u1 = User(name='japan')
session.add(u1)
session.commit()
u1.addresses.append(Address(address='a1'))
u1.addresses.append(Address(address='a2'))
session.flush()
q = session.query(User).join(User.addresses).all()
print "="*23,q