Memoize2

Python でジェネレータを実装する(SQLite3 を使ったサンプル)

モジュールファイル: sqliteIter.py


#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import sqlite3

class SqliteIter:
    """DBファイル名を受け取ってインスタンスを生成し、
       fetchrow メソッドでレコードのタプルを返すジェネレータを生成する"""
    def __init__(self, dbName):
        self.dbName = dbName

    def fetchrow(self, sql):
        conn = sqlite3.connect(self.dbName)
        cur = conn.cursor()
        cur.execute(sql)
        for row in cur.fetchall():
            yield row

        conn.close()

if __name__ == '__main__':
    dbName, sql = sys.argv[1:]
    s = SqliteIter(dbName)
    for row in s.fetchrow(sql):
        print(row)

実行例の前にサンプルのデータベースを作っておく


$ cat sample/members.csv
    id,name
    100,John
    300,Ash
    500,Q

$ sqlite3 -separator ',' main.db ".import 'sample/members.csv' members"

実行例: まずはモジュールファイルに引数を与えて実行した結果


$ sqliteIter.py main.db "SELECT * FROM members;"
    ('100', 'John')
    ('300', 'Ash')
    ('500', 'Q')

実行例: モジュールとして読み込んだ場合


$ python
    Python 3.5.2 (default, Jun 28 2016, 08:46:01) 
    [GCC 6.1.1 20160602] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sqliteIter
    >>> 
    >>> s = sqliteIter.SqliteIter("./main.db")
    >>> sql = "SELECT * FROM members;"
    >>> for row in s.fetchrow(sql):
    ...     print("\t".join(row))
    ... 
    100    John
    300    Ash
    500    Q

 

Last modified: 2016-12-19

Page Top

Index

Bw

Author: 中村 心 Shin Nakamura, Email: sn(at)i.basicwerk.com


© Shin Nakamura/BasicWerk 2008 - 2017