I have the following code:

from objects import *

class Device(Base):
__tablename__="testdev"
 devtype = Column(Unicode(20), primary_key = True)
__mapper_args__ = {'polymorphic_on': devtype}
 mac = Column(Unicode(128), primary_key = True)
switch_mac = Column(Unicode(128), ForeignKey(mac))
 switch = relationship('Device', primaryjoin = 'Device.switch_mac ==
Device.mac', backref=backref('connections'), remote_side = [mac])
 cablelength = Column(Float, nullable = True)

class PC(Device):
__mapper_args__ = {'polymorphic_identity': u'P'}
 class Switch(Device):
__mapper_args__ = {'polymorphic_identity': u'S'}
 Switch.PC_cablelength_avg = column_property (
select([func.avg(PC.cablelength)]).where(PC.switch_mac ==
Switch.mac).as_scalar()
)

>>> s = Switch(mac='s1')
>>> p = PC(mac='p1',switch_mac=s.mac, cablelength = 100)
>>> Session.add(p) # adds a PC with a cable length of 100 to switch s
>>> Session.add(s)
>>> Session.commit()
>>> s = Session.query(Switch).first()
>>> s.PC_cablelength_avg
>>>

Expected value for s.PC_cablelength_avg is 100.

The select statement (from first()) looks like this:

SELECT testdev.devtype AS testdev_devtype, testdev.mac AS testdev_mac,
testdev.switch_mac AS testdev_switch_mac, testdev.cablelength AS
testdev_cablelength, (SELECT avg(testdev.cablelength) AS avg_1
FROM testdev
WHERE testdev.switch_mac = testdev.mac) AS anon_1
FROM testdev
WHERE testdev.devtype IN (%s)
 LIMIT 0, 1
('S',)


The issue, I think, is that the "WHERE testdev.devtype IN 'S'" is causing
the results to not include objects of type PC, which is what's used in the
column_property.

How do I create column_properties for a subclass that reference another
subclass when using a single-table inheritance model?

S.

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

Reply via email to