I assume I am over looking some simple thing, but I just can't seem to
find it. Thanks for the assist, I have palms open ready for face
planting.

Using a class and table with orm.mapper()

class Child(object):
    pass
child_table = Table('child', meta.metadata,
        Column('parent_id', Integer, primary_key=True),
        Column('parent_ref', Integer, nullable=False),
        Column('content', String(10)),
        ForeignKeyConstraint(['parent_id', 'parent_ref'],
['parent.id', 'parent.ref'])
)
orm.mapper(Child, child_table)

class Parent(object):
    pass
parent_table = Table('parent', meta.metadata,
        Column('id', Integer, primary_key=True),
        Column('ref', Integer, primary_key=True)
)
orm.mapper(Parent, parent_table, properties={
        'children':relation(Child, lazy=False)
})

Produces the following create

2009-04-08 16:36:54,319 INFO sqlalchemy.engine.base.Engine.0x...a6b0
CREATE TABLE parent (
        id INTEGER NOT NULL,
        ref INTEGER NOT NULL,
        PRIMARY KEY (id, ref)
)
2009-04-08 16:36:54,319 INFO sqlalchemy.engine.base.Engine.0x...a6b0
{}
2009-04-08 16:36:54,454 INFO sqlalchemy.engine.base.Engine.0x...a6b0
COMMIT
2009-04-08 16:36:54,456 INFO sqlalchemy.engine.base.Engine.0x...a6b0
CREATE TABLE child (
        parent_id INTEGER NOT NULL,
        parent_ref INTEGER NOT NULL,
        content VARCHAR(10),
        PRIMARY KEY (parent_id),
         FOREIGN KEY(parent_id, parent_ref) REFERENCES parent (id, ref)
)

Using what I believe is the exact same thing with declarative produces
the creates minus the composite foreign key and then of course is
unable to establish the relation.

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    ref = Column(Integer, primary_key=True)
    children = relation("Child", lazy=False)

class Child(Base):
    __tablename__ = 'child'
    __table_args__ = ForeignKeyConstraint(['parent_id','parent_ref'],
['parent.id', 'parent.ref'])

    parent_id = Column(Integer, primary_key=True)
    parent_ref = Column(Integer, nullable=False)
    content = Column(String(10))

The create output is

2009-04-08 16:47:08,331 INFO sqlalchemy.engine.base.Engine.0x...a710
CREATE TABLE child (
        parent_id INTEGER NOT NULL,
        parent_ref INTEGER NOT NULL,
        content VARCHAR(10),
        PRIMARY KEY (parent_id)
)
2009-04-08 16:47:08,331 INFO sqlalchemy.engine.base.Engine.0x...a710
{}
2009-04-08 16:47:08,464 INFO sqlalchemy.engine.base.Engine.0x...a710
COMMIT
2009-04-08 16:47:08,466 INFO sqlalchemy.engine.base.Engine.0x...a710
CREATE TABLE parent (
        id INTEGER NOT NULL,
        ref INTEGER NOT NULL,
        PRIMARY KEY (id, ref)
)

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