#!/usr/bin/env python

import apsw
import tempfile

fh = tempfile.NamedTemporaryFile()
conn = apsw.Connection(fh.name)

# Fill the db with some data
cur = conn.cursor()
datafh = open("/dev/urandom", "rb")
cur.execute("CREATE TABLE foo (no INT, data BLOB)")
for i in range(42):
    cur.execute("INSERT INTO foo(no,data) VALUES(?,?)", (i, buffer(datafh.read(4096))))
del cur    

# Here comes the problem:
def dostuff(conn, fail):
    cur = conn.cursor()
    # Ignore result, we just need to make some query
    cur.execute("SELECT data FROM foo WHERE no = ?", (33,))
    cur2 = conn.cursor()
    
    if fail:
        raise TypeError
    else:
        return
    
# This works:
dostuff(conn, fail=False)
cur = conn.cursor()
cur.execute("VACUUM")
#cur.execute("CREATE TABLE test (no INT)")

# This does not:
try:
    dostuff(conn, fail=True)
except TypeError:       
    cur = conn.cursor()
    cur.execute("VACUUM")
    #cur.execute("CREATE TABLE test2 (no INT)")

