import gc import objgraph import sqlite3 def leaking(): connection = sqlite3.connect('./test.db3') cursor = connection.cursor() cursor.execute('CREATE TABLE test_insert (id ROWID, value INTEGER);') query = 'INSERT INTO test_insert (value) VALUES (%s)' gc.collect() objgraph.show_growth() for entry in range(1, 2000): cursor.execute(query % entry) connection.commit() gc.collect() objgraph.show_growth() cursor.close() connection.close() def non_leaking(): connection = sqlite3.connect('./test.db3') cursor = connection.cursor() cursor.execute('CREATE TABLE test_insert (id ROWID, value INTEGER);') query = 'INSERT INTO test_insert (value) VALUES (?)' gc.collect() objgraph.show_growth() for entry in range(1, 2000): cursor.execute(query, [entry]) connection.commit() gc.collect() objgraph.show_growth() cursor.close() connection.close()