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
-~----------~----~----~----~------~----~------~--~---

Reply via email to