Hmmm. It also appears that the 4 step solution I gave above doesn't
work consistently. Any ideas as to why not?

On May 27, 1:07 am, Jeff <jeffalst...@gmail.com> wrote:
> I have multiple processes accessing  a table. All of these processes
> want to read a set of rows from the table, and if the rows are not
> present they will make a calculation and insert the rows themselves.
> The issue comes where process  A does a query to see if the target set
> of rows is present in the table, and they're not, and then another
> starts calculating. While it's calculating, process B inserts the
> rows. Then process A inserts the rows, and now we have two copies of
> these sets of rows. Bad.
>
> The current solution is to have a process:
> 1. Lock the table with session.execute("LOCK TABLES table WRITE")
> 2. Query
> 3. If need be, calculate and commit
> 4. Unlock with session.execute("UNLOCK TABLES")
>
> Then if another process wants to query while the calculation is
> happening, it will have to wait until the table unlocks, and it will
> see the result of the commit. The wait time of the locked table is
> acceptable.
>
> That should work, but is ugly and, worse, requires explicit MySQL
> code. I understand this could lead to dependency on the backend
> implementation (ie. If this code was ever used on an sqlite
> database?). Regardless, I'd like to do this completely within
> sqlalchemy.  Is there a way to do this? It seems like there might be a
> way to do this with transactions, but I can't parse it. Thoughts?
>
> Thanks!

-- 
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 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to