nah ill just take the "if discriminator" line out. feel free to try
that locally.
On Jan 6, 2008, at 4:51 PM, Dave Harrison wrote:
>
> Yeah once I'd worked it out I converted the field over to being an
> int field, just didn't see this one coming :-) Maybe something worth
> adding into the doco if it's going to stick around ?
>
> On Monday 07 January 2008 02:03:19 Michael Bayer wrote:
>> yeah thats line 1303 of mapper.py. i think i might have made that
>> change right in 0.4.2 thinking, nobody would use a boolean "False" as
>> a discriminator....any chance you can go with some plain int or
>> string for that ?
>>
>> On Jan 5, 2008, at 11:47 PM, Dave Harrison wrote:
>>> Hey all,
>>>
>>> More fun with inheritance and mappers. In the following situation
>>> where the polymorphic type is a Boolean, the mapper for the object
>>> that matches on False incorrectly returns the parent object.
>>>
>>> Cheers
>>> Dave
>>>
>>> ------------------------------
>>> -- testapi.py ----------------
>>> ------------------------------
>>>
>>> from sqlalchemy import *
>>> from sqlalchemy.orm import *
>>>
>>> session = scoped_session(
>>> sessionmaker(autoflush=False, transactional=True)
>>> )
>>> mapper = session.mapper
>>> metadata = MetaData()
>>>
>>> ANIMAL_TYPE_DOG = True
>>> ANIMAL_TYPE_CAT = False
>>>
>>> VET_TYPE_CITY = 1
>>> VET_TYPE_COUNTRY = 2
>>>
>>> animalTable = Table(
>>> 'animal',
>>> metadata,
>>> Column('id', Integer, primary_key=True),
>>> Column('type', Boolean, nullable=False),
>>> Column('name', String(100), nullable=False),
>>> Column('vet_id', Integer, ForeignKey('vet.id')),
>>> )
>>>
>>> vetTable = Table(
>>> 'vet',
>>> metadata,
>>> Column('id', Integer, primary_key=True),
>>> Column('address', String(100), nullable=False),
>>> Column('kennel', Boolean, nullable=False),
>>> )
>>>
>>> class _Animal(object):
>>> pass
>>> class Cat(_Animal):
>>> pass
>>> class Dog(_Animal):
>>> pass
>>> class Vet(object):
>>> pass
>>>
>>> vetMapper = mapper(
>>> Vet,
>>> vetTable,
>>> properties = {
>>> "animals": relation(
>>> _Animal,
>>> backref=backref("vet", uselist=False),
>>> cascade="all, delete-orphan"
>>> ),
>>> }
>>> )
>>>
>>> animalMapper = mapper(
>>> _Animal,
>>> animalTable,
>>> polymorphic_on=animalTable.c.type,
>>> )
>>> mapper(
>>> Dog,
>>> inherits=animalMapper,
>>> polymorphic_identity=ANIMAL_TYPE_DOG,
>>> )
>>> mapper(
>>> Cat,
>>> inherits=animalMapper,
>>> polymorphic_identity=ANIMAL_TYPE_CAT,
>>> )
>>>
>>> def connect(uri):
>>> engine = create_engine(uri, strategy="threadlocal")
>>> metadata.bind = engine
>>> return engine
>>>
>>> def create():
>>> metadata.create_all()
>>>
>>> def drop():
>>> metadata.drop_all()
>>>
>>> ------------------------------
>>> -- test.py ----------------
>>> ------------------------------
>>>
>>> import sys
>>> import testapi as db
>>>
>>> DB = "sqlite:///memory"
>>> db.connect(DB)
>>> db.create()
>>>
>>> v = db.Vet()
>>> v.address = "12 Foo St"
>>> v.kennel = True
>>>
>>> c1 = db.Cat()
>>> c1.name = "muffin"
>>>
>>> c2 = db.Cat()
>>> c2.name = "bagel"
>>>
>>> d1 = db.Dog()
>>> d1.name = "rex"
>>>
>>> d2 = db.Dog()
>>> d2.name = "bill"
>>>
>>> db.session.flush()
>>> db.session.clear()
>>>
>>> for d in db.Query(db.Dog).all():
>>> v.animals.append(d)
>>> for c in db.Query(db.Cat).all():
>>> v.animals.append(c)
>>>
>>> db.session.flush()
>>> db.session.clear()
>>>
>>> v = db.Query(db.Vet).first()
>>> for a in v.animals:
>>> print a
>>
>>
>
> >
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---