On Apr 30, 2008, at 12:56 PM, Eric Lemoine wrote:

>
> thread 1                                                     thread 2
> execute(seq) -> nextid = n
>
> execute(seq) -> nextid = n
> model.Session.save(campfacility)
>
> model.Session.save(campfacility) -> BUG, nextid isn't correct

whats "correct" here, you'd like the integer identifier to be in exact  
row-insert order ?   if the column is a non-primary key column, the  
sequence will be executed "inline" within the executed SQL so that it  
will in fact be in row insert order (i.e. update table set  
foo_id=nextval(myseq)).  you can also do this at flush time by  
assigning "func.nextval(literal_column("my_sequence_name"))" to the  
mapped attribute (assuming its not a PK).

for primary keys we need to know the ID beforehand in most cases since  
PG historically has not had a way to get that ID back nicely after  
insert (it has INSERT RETURNING now but we haven't standardized on  
that yet).

So if its a PK, I would question why you actually need an incrementing  
id in row-insert order on the table in the first place.  Usually, if I  
want to load records in the order in which they were inserted in a  
foolproof way, I'll use a UTC timestamp column with an index for  
that....since the information you are looking for here is "what was  
inserted when?"


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

Reply via email to