[Sqlalchemy-tickets] [sqlalchemy] #1300: polymorphic_on identity value not inserted if the 'on' col
Brought to you by:
zzzeek
|
From: sqlalchemy <mi...@zz...> - 2009-01-30 20:57:46
|
#1300: polymorphic_on identity value not inserted if the 'on' column is a member
of the primary key
--------------------+-------------------------------------------------------
Reporter: jek | Owner: zzzeek
Type: defect | Status: new
Priority: medium | Milestone:
Component: orm | Severity: no triage selected yet
Keywords: | Status_field: awaiting triage
--------------------+-------------------------------------------------------
{{{
from sqlalchemy import *
from sqlalchemy.orm import *
def test(use_composite_pk):
metadata = MetaData('sqlite:///')
parents = Table('parents', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(60)))
children = Table('children', metadata,
Column('id', Integer, ForeignKey('parents.id'),
primary_key=True, nullable=False),
Column('type', Integer,
primary_key=use_composite_pk,
nullable=False),
Column('name', String(60)))
metadata.create_all()
class Parent(object):
def __init__(self, name=None):
self.name = name
class Child(object):
def __init__(self, name=None):
self.name = name
class A(Child): pass
mapper(Parent, parents, properties={
'children': relation(Child, backref='parent'),
})
mapper(Child, children, polymorphic_on=children.c.type,
polymorphic_identity=1)
mapper(A, inherits=Child, polymorphic_identity=2)
s = create_session()
p = Parent('p1')
a = A('a1')
p.children.append(a)
s.add(p)
s.flush()
assert a.id
assert a.type
print "1 col pk"
test(False)
print "2 col pk"
test(True)
}}}
--
Ticket URL: <http://www.sqlalchemy.org/trac/ticket/1300>
sqlalchemy <http://www.sqlalchemy.org/>
The Database Toolkit for Python |