Heres a test case which works fine:
from sqlalchemy import *
from sqlalchemy.orm import *
engine = create_engine('sqlite://', echo=True)
meta = MetaData(engine)
r_table = Table('relation', meta,
Column('id', Integer, primary_key=True, autoincrement=True),
Column('left', String(length=32), ForeignKey("soup.uuid"),
index=True),
Column('right', String(length=32),ForeignKey("soup.uuid")),
)
s_table = Table('soup', meta, Column('uuid', String(50),
primary_key=True))
meta.create_all()
class S(object):
def __init__(self, uuid):
self.uuid = uuid
class R(object):
def __init__(self, left, right):
self.left = left
self.right = right
mapper(S, s_table)
mapper(R, r_table, properties={
'_left':r_table.c.left,
'_right':r_table.c.right,
'left':relation(S, primaryjoin=s_table.c.uuid==r_table.c.left),
'right':relation(S, primaryjoin=s_table.c.uuid==r_table.c.right),
})
sess = create_session()
s1 = S('one')
s2 = S('two')
r1 = R(s1, s2)
sess.save(r1)
sess.flush()
assert r1._left == s1.uuid
assert r1._right == s2.uuid
assert r_table.select().execute().fetchall() == [(1, 'one', 'two')]
On Jun 10, 2008, at 10:34 AM, Malthe Borch wrote:
>
> I have an issue with SQLAlchemy planning to execute insertion tasks in
> the wrong order.
>
> Basically, I have a utility table "Relations" which is used to
> maintain
> ordered list relations:
>
> table = rdb.Table(
> 'relation',
> metadata,
> rdb.Column('id', rdb.Integer, primary_key=True, autoincrement=True),
> rdb.Column('left', rdb.String(length=32),
> rdb.ForeignKey("soup.uuid"), index=True),
> rdb.Column('right', rdb.String(length=32),
> rdb.ForeignKey("soup.uuid")),
> rdb.Column('order', rdb.Integer, nullable=False))
>
> Now, I append a new, transient object to such an ordered list. That
> means that SQLAlchemy would make two inserts. The problem is that the
> tasks are ordered such that the *relation* is inserted before the
> object
> that is the target of the relation!
>
> This obviously raises an IntegrityError, since the foreign key
> constraint is not satisfied.
>
> My question is then: How do I tell SQLAlchemy to order them correctly?
>
> \malthe
>
>
> >
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---