PySQLite(1)
以前からSQLite3のdbファイルを読み込むプログラムを書いていますが、それに書きこむ機能も追加しています。とりあえずPySQLiteと呼んでいます。まだ、レコードの大きさに制限がありますが、書き込みができるようになりました(削除とアップデートはまだできません)。使い方はこんな感じです。
def test_pager_newdatabase(self): if os.path.exists('tmp.db'): os.remove('tmp.db') pager = Pager('tmp.db') self.assertEqual(1, pager.nPage) fp = pager.fp fp.pos = 0 self.assertEqual('PySQLite\x00', fp.read('bytes:9')) self.assertEqual(1024, pager.get_pagesize()) self.assertEqual(0x01, pager.get_fileformat('r')) self.assertEqual(0x01, pager.get_fileformat('w')) self.assertTrue(os.path.exists('tmp.db')) os.remove('tmp.db') def test_cursor_insert_overflow(self): if os.path.exists('tmp11.db'): os.remove('tmp11.db') #write pager = Pager('tmp11.db') page = pager.createPage(1, LEAF) self.assertEqual(1, pager.nPage) cursor = Cursor(pager, 1) values = itertools.permutations('abcdefg') for i, value in enumerate(values): v = (i, ''.join(value)*10) cursor.insert(pager, v) del cursor del pager #read pager = Pager('tmp11.db') cursor = Cursor(pager, 1) cursor.moveToRoot() values = itertools.permutations('abcdefg') for i, value in enumerate(values): next(cursor) self.assertEqual(i+1, cursor.cell.rowid) self.assertEqual(i, cursor.getvalue(pager, 0)) self.assertEqual(''.join(value)*10, cursor.getvalue(pager, 1)) self.assertRaises(StopIteration, next, cursor)