PySQLite(2)

読み書き部分は完成しました。モジュールとして使うときは、次のように使います。

#!/usr/bin/env python2.6
# -*- coding: utf-8 -*-
import unittest
import os
from pysql import *
class DBTests(unittest.TestCase):
    def test_create_table(self):
        if os.path.exists("example.db"):
            os.remove("example.db")
        db = DB("example.db")
        db.create('Products', ('name', 'price'))
        rows = db.find({'from':'pysql_master',})
        self.assertEqual(("Products", 2, "name,price"), next(rows))
        self.assertRaises(StopIteration, next, rows)
    def test_insert(self):
        if os.path.exists("example2.db"):
            os.remove("example2.db")
        db = DB("example2.db")
        db.create('Products', ('name', 'price'))
        rows = db.find({'from':'Products',})
        self.assertRaises(StopIteration, next, rows)
        inp= [("りんご", 30),
              ("みかん", 50)]
        for v in inp:
            db.insert("Products", v)
        rows = db.find({'from':'Products',})
        for v in inp:
            self.assertEqual(v, next(rows))
        self.assertRaises(StopIteration, next, rows)
if __name__ == '__main__':
    unittest.main()

コマンドラインから使うときには、型はstringしか使えませんが次のように使います。
createコマンドでtableを作ります。


$ ./pysql.py create test.db Products name price

tableはpysql_master内で管理しています。findで確認できます。

$ ./pysql.py find test.db pysql_master
('Products', 2, 'name,price')

tableをもうひとつ追加

$ ./pysql.py create test.db factorials input value
$ ./pysql.py find test.db pysql_master
('Products', 2, 'name,price')
('factorials', 3, 'input,value')

いくつか値を入れてみます。

$ ./pysql.py insert test.db Products apple 30
$ ./pysql.py insert test.db Products orange 50
$ ./pysql.py insert test.db factorials 0 1
$ ./pysql.py insert test.db factorials 1 1
$ ./pysql.py insert test.db factorials 2 2
$ ./pysql.py insert test.db factorials 3 6
$ ./pysql.py insert test.db factorials 4 24
$ ./pysql.py insert test.db factorials 5 120
$ ./pysql.py find test.db factorials
('0', '1')
('1', '1')
('2', '2')
('3', '6')
('4', '24')
('5', '120')
$ ./pysql.py find test.db Products
('apple', '30')
('orange', '50')
$

普通に動きました。