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 sqlalchemy@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---