I am trying to configure the following relationships:

    table1 <-1-----------N->   table2
                                   ___|___- type
                                   |           |
 table_ex22 <1--N-> table21   table22

paste my code here. When relate a instance of Table22 with the
TableEx22 parent, this relationship involves all Table2 instances.
Why? and how can i avoid this?

Thanks,
Fernando

#------------------------------------------------------------------------------

engine = create_engine('sqlite:///',echo = False)

metadata = MetaData()

table_1 =  \
Table(
    'table_1', metadata,
    Column('id', Integer, primary_key = True),
)

table_2 = \
Table(
    'table_2', metadata,
    Column('id', Integer, primary_key = True),
    Column('id2', Integer, primary_key = True),
    Column('type', Integer, nullable = False),
    ForeignKeyConstraint(['id'],['table_1.id'])
)

table_21 = \
Table(
    'table_21', metadata,
    Column('id', Integer, primary_key = True),
    Column('id2', Integer, primary_key = True),
    Column('info', String),
    ForeignKeyConstraint(['id'],['table_2.id']),
)

table_22 = \
Table(
    'table_22', metadata,
    Column('id', Integer, primary_key = True),
    Column('id2', Integer, primary_key = True),
    Column('ext', Integer, primary_key = True),
    Column('info', String),
    ForeignKeyConstraint(['id'],['table_2.id']),
    ForeignKeyConstraint(['ext'],['table_ex22.id'])
)

table_ex22 = \
Table(
    'table_ex22', metadata,
    Column('id', Integer, primary_key = True),
)

class Table1(object):
    pass

class Table2(object):
    pass

class Table21(Tabla2):
    pass

class Table22(Tabla2):
    pass

class TableEx22(object):
   pass

mapper(Table1, table_1,
       properties = {\
       't2': relation(Table2, backref = 't1', cascade = 'all, delete,
delete-orphan', passive_updates = False, passive_deletes = False),
       }
)
mapper(TableEx22, table_ex22,
       properties = {\
       't22': relation(Table2, backref = 'tex', cascade = 'all,
delete, delete-orphan', passive_updates =False, passive_deletes =
False),
       }
)
mapper(Table2, table_2, polymorphic_on=table_2.c.type,
polymorphic_identity=0)
mapper(Table21, table_21, inherits=Table2, polymorphic_identity=1)
mapper(Table22, table_22, inherits=Table2, polymorphic_identity=2)

Session = sessionmaker()
#------------------------------------------------------------------------------

#test:


metadata.bind = engine
metadata.create_all()

s = Session()

t = Table1()
t.id = 0

tex = TableEx22()
tex.id = 0

s.add(t)
s.add(tex)
s.commit()

t21 = Table21()
t21.id2 = 0
t21.t1 = t
s.add(t21)
s.commit()

t22 = Table22()
t22.id2 = 1
t22.t1 = t
t22.tex = tex
s.add(t22)
s.commit()

for i in tex.t22:
    print type(i)

>> response:
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
PRAGMA table_info("table_1")
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
()
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
PRAGMA table_info("table_2")
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
()
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
PRAGMA table_info("table_21")
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
()
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
PRAGMA table_info("table_ex22")
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
()
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
PRAGMA table_info("table_22")
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
()
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
CREATE TABLE table_1 (
        id INTEGER NOT NULL,
        PRIMARY KEY (id)
)


2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
()
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
COMMIT
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
CREATE TABLE table_2 (
        id INTEGER NOT NULL,
        id2 INTEGER NOT NULL,
        type INTEGER NOT NULL,
        PRIMARY KEY (id, id2),
         FOREIGN KEY(id) REFERENCES table_1 (id)
)


2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
()
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
COMMIT
2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
CREATE TABLE table_21 (
        id INTEGER NOT NULL,
        id2 INTEGER NOT NULL,
        info VARCHAR,
        PRIMARY KEY (id, id2),
         FOREIGN KEY(id) REFERENCES table_2 (id)
)


2009-05-18 14:38:32,953 INFO sqlalchemy.engine.base.Engine.0x...5430
()
2009-05-18 14:38:32,967 INFO sqlalchemy.engine.base.Engine.0x...5430
COMMIT
2009-05-18 14:38:32,967 INFO sqlalchemy.engine.base.Engine.0x...5430
CREATE TABLE table_ex22 (
        id INTEGER NOT NULL,
        PRIMARY KEY (id)
)


2009-05-18 14:38:32,967 INFO sqlalchemy.engine.base.Engine.0x...5430
()
2009-05-18 14:38:32,967 INFO sqlalchemy.engine.base.Engine.0x...5430
COMMIT
2009-05-18 14:38:32,967 INFO sqlalchemy.engine.base.Engine.0x...5430
CREATE TABLE table_22 (
        id INTEGER NOT NULL,
        id2 INTEGER NOT NULL,
        ext INTEGER NOT NULL,
        info VARCHAR,
        PRIMARY KEY (id, id2, ext),
         FOREIGN KEY(id) REFERENCES table_2 (id),
         FOREIGN KEY(ext) REFERENCES table_ex22 (id)
)


2009-05-18 14:38:32,967 INFO sqlalchemy.engine.base.Engine.0x...5430
()
2009-05-18 14:38:32,967 INFO sqlalchemy.engine.base.Engine.0x...5430
COMMIT
2009-05-18 14:38:32,967 INFO sqlalchemy.engine.base.Engine.0x...5430
BEGIN
2009-05-18 14:38:32,967 INFO sqlalchemy.engine.base.Engine.0x...5430
INSERT INTO table_ex22 (id) VALUES (?)
2009-05-18 14:38:32,967 INFO sqlalchemy.engine.base.Engine.0x...5430
[0]
2009-05-18 14:38:32,967 INFO sqlalchemy.engine.base.Engine.0x...5430
INSERT INTO table_1 (id) VALUES (?)
2009-05-18 14:38:32,967 INFO sqlalchemy.engine.base.Engine.0x...5430
[0]
2009-05-18 14:38:32,983 INFO sqlalchemy.engine.base.Engine.0x...5430
COMMIT
2009-05-18 14:38:32,983 INFO sqlalchemy.engine.base.Engine.0x...5430
BEGIN
2009-05-18 14:38:32,983 INFO sqlalchemy.engine.base.Engine.0x...5430
SELECT table_1.id AS table_1_id
FROM table_1
WHERE table_1.id = ?
2009-05-18 14:38:32,983 INFO sqlalchemy.engine.base.Engine.0x...5430
[0]
2009-05-18 14:38:32,983 INFO sqlalchemy.engine.base.Engine.0x...5430
INSERT INTO table_2 (id, id2, type) VALUES (?, ?, ?)
2009-05-18 14:38:32,983 INFO sqlalchemy.engine.base.Engine.0x...5430
[0, 0, 1]
2009-05-18 14:38:32,983 INFO sqlalchemy.engine.base.Engine.0x...5430
INSERT INTO table_21 (id, id2, info) VALUES (?, ?, ?)
2009-05-18 14:38:32,983 INFO sqlalchemy.engine.base.Engine.0x...5430
[0, 0, None]
2009-05-18 14:38:32,983 INFO sqlalchemy.engine.base.Engine.0x...5430
COMMIT
2009-05-18 14:38:32,983 INFO sqlalchemy.engine.base.Engine.0x...5430
BEGIN
2009-05-18 14:38:32,983 INFO sqlalchemy.engine.base.Engine.0x...5430
SELECT table_ex22.id AS table_ex22_id
FROM table_ex22
WHERE table_ex22.id = ?
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
[0]
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
SELECT table_1.id AS table_1_id
FROM table_1
WHERE table_1.id = ?
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
[0]
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
INSERT INTO table_2 (id, id2, type) VALUES (?, ?, ?)
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
[0, 1, 2]
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
INSERT INTO table_22 (id, id2, ext, info) VALUES (?, ?, ?, ?)
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
[0, 1, 0, None]
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
COMMIT
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
BEGIN
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
SELECT table_ex22.id AS table_ex22_id
FROM table_ex22
WHERE table_ex22.id = ?
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
[0]
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
SELECT table_2.id AS table_2_id, table_22.id AS table_22_id,
table_2.id2 AS table_2_id2, table_22.id2 AS table_22_id2, table_2.type
AS table_2_type, table_22.ext AS table_22_ext, table_22.info AS
table_22_info
FROM table_2 JOIN table_22 ON table_2.id = table_22.id
WHERE ? = table_22.ext
2009-05-18 14:38:33,000 INFO sqlalchemy.engine.base.Engine.0x...5430
[0]
<class '__main__.Table21'>
<class '__main__.Table22'>



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

Reply via email to