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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---