from sqlalchemy import *
from sqlalchemy.orm import *
import sys
db = create_engine( 'sqlite:///', echo ='echo' in sys.argv)
meta = MetaData( db)

t1 = Table('t1', meta,
        Column('ref', Text, ),
        Column('id', Integer, primary_key=True),
    )
t2 = Table('t2', meta,
        Column('name', Text, ),
        Column('id', Integer, primary_key=True),
    )
t12 = Table('tab', meta,
        Column('t1_id', Integer, ForeignKey('t1.id',)),
        Column('t2_id', Integer, ForeignKey('t2.id',)),
    )

meta.create_all()
class A(object): pass
class B(object): pass
mapper( B, t2, )
#mapper( AB, t12, )
mapper( A, t1, properties=dict(
        b_view = relation( B, secondary=t12, uselist=True, lazy=True,
                viewonly=True
                ),
        b_plain= relation( B, secondary=t12, uselist=True, lazy=True,
                ),
         )
    )
b = B()
session = create_session()
print session.query(A).filter( A.b_plain.contains(b) )
print session.query(A).filter( A.b_view.contains( b) )
