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 - 2025 |