only the class owner of the identity sets it, internaly. i your case Input has no separate identity, but this does not give u right to set identity manualy. if it had, a=Input( whatver) would set that.
or that's how i get it. On Monday 02 February 2009 04:15, MikeCo wrote: > I have a single table polymorphism question. It looks like I can't > directly set the value of the polymorphic discriminator when creating > records; it is only set correctly when you instantiate objects of the > derived class. Is that true? Why, or what is wrong here? > > Here is the scenario: > > Jobs have Steps, Steps have Inputs of different types (say "SRC1" and > "SRC2") > > Use declarative to set up these classes: > > class Job(Base): > __tablename__ = 'job' > id = Column(Integer, primary_key=True, autoincrement=True) > title = Column(String(20)) > jobnum = Column(Integer) > steps = relation('Step', backref=('jobs')) > def __repr__(s): > return '<Job> %s title=%s'%(s.id,s.title) > > class Step(Base): > __tablename__ = 'step' > id = Column(Integer, primary_key=True, autoincrement=True) > name = Column(String(20)) > job_id = Column(Integer, ForeignKey('job.id')) > inputs = relation('Input', backref=('step')) > def __repr__(s): > return '<Step> %s name=%s'%(s.id,s.name) > > class Input(Base): > __tablename__ = 'input' > id = Column(Integer, primary_key=True, autoincrement=True) > kind = Column(String(10)) > value = Column(String(30)) > step_id = Column(Integer, ForeignKey('step.id')) > __mapper_args__ = {'polymorphic_on': kind} > def __repr__(s): > return '<Input> %s kind=%s value=%s'%(s.id,s.kind,s.value) > > class SRC1(Input): > __mapper_args__ = {'polymorphic_identity': 'SRC1'} > src1file = Column(String(100)) > > class SRC2(Input): > __mapper_args__ = {'polymorphic_identity': 'SRC2'} > src2file = Column(String(100)) > > > insert some data like this > > j1 = Job(title='Job#201',jobnum=201) > step = Step(name='job201-step1') > j1.steps.append(step) > > inp1 = SRC1(value='this one works') > step.inputs.append(inp1) > > inp2 = Input(kind='SRC2',value='why is kind = NULL here') > step.inputs.append(inp2) > > inp3 = Input(value='kind is null here also') > inp3.kind='SRC2' > step.inputs.append(inp3) > > session.add(j1) > session.commit() > > > when i retrieve the data notice that the 2nd and 3rd records have no > kind value, even though I tried to explicitly set it. > > for i in session.query(Input): > print i > > <Input> 1 kind=SRC1 value=this one works > <Input> 2 kind=None value=why is kind = NULL here > <Input> 3 kind=None value=kind is null here also > > > So what happened with inp2 and inp3 where I tried to assign a value to > "kind"? > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@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 -~----------~----~----~----~------~----~------~--~---