Hi all,

I've been writing some tests for an application that makes use of
transactions and came across a strange issue: the Transactions in my
tests seemed to be committed before commit() was called. After some
head scratching I reduced the problem to a minimal test case and found
that everything works as I expected it to if I used a real file, but
not if I use an in-memory database.

Based on my new understanding of in-memory databases I _think_ this
makes sense, because there's no real way to "lock" them or have
multiple, separate, connections -- but I would really appreciate
someone confirming this, or otherwise explaining what's going on here.

Here's my test case and the output of it for an in-memory and a real
file database:
[] bhearsum@voot:~/tmp$ cat test2.py
#!/usr/bin/env python

from sqlalchemy import Table, Column, Integer, MetaData, create_engine

import sys
engine = create_engine('sqlite:///%s' % sys.argv[1])
metadata = MetaData(engine)
t = Table('test', metadata, Column('foo', Integer), Column('bar',
Integer))
t2 = Table('test2', metadata, Column('baz', Integer), Column('crap',
Integer))
metadata.create_all()
t.insert().execute(dict(foo=1, bar=100))
t.insert().execute(dict(foo=2, bar=200))

conn = metadata.bind.connect()
trans = conn.begin()
conn.execute(t.update(values=dict(bar=500)).where(t.c.foo==1))
print engine.execute(t.select()).fetchall()
trans.commit()
[] bhearsum@voot:~/tmp$ python test2.py :memory:
[(1, 500), (2, 200)]
[] bhearsum@voot:~/tmp$ python test2.py newdb.db
[(1, 100), (2, 200)]

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