On Apr 30, 2008, at 3:23 PM, Eric Lemoine wrote:
>
> Yes, the sequence is my table's PK. What I want to know is the PK
> value of the line I'm going to insert (or I've just inserted). So I
> guess this is indeed INSERT RETURNING.
if you pre-execute the sequence, the number you get back from it is
yours to keep and will never come up again (unless the sequence is
manually manipulated). Its safe to use for a primary key value at
any time regardless of concurrent threads which also use that sequence.
SQLAlchemy does this process for you automatically, so if you just set
the Sequence() on your table's primary key Column, you can safely save
and flush your instances without assigning any identifier, and the
newly generated id is present on the corresponding class attributes,
i.e.:
mytable = Table('mytable', metadata, Column('id', Sequence('my_seq'),
primary_key=True), ...)
mapper(MyClass, mytable, ...)
x = MyClass()
session.save(x)
session.flush()
newly_inserted_id = x.id
no threading issues to worry about. Same thing happens with raw
inserts, if you leave the "id" column out of the values list:
result = engine.execute(mytable.insert())
newly_inserted_id = result.last_inserted_ids()[0]
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---