読者です 読者をやめる 読者になる 読者になる

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)