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 | ||
|
||
|
||
© Shin Nakamura/BasicWerk 2008 - 2024 |