Memoize2

Python sqlite3.Row を使ってインデックスでもカラム名でも要素にアクセスできるようにする


# サンプルテーブル。mein.db というデータベースファイルに members というテーブルがあるとする
$ sqlite3 -header -separator "    " main.db "SELECT * FROM members;"
mem_id  name    age likes
100     John    22  Cheese
300     Ash     44  Oil
500     Q       24  CPU


# スクリプトの中身
$ cat SQLITE.py
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import sqlite3

def fetch(db, sql) :
    con = sqlite3.connect(db)
    con.row_factory = sqlite3.Row
    cur = con.cursor()
    cur.execute(sql)
    for row in cur :
        yield row
        # このジェネレータで返している row は
        # インデックスでもカラム名でも要素にアクセス可能なオブジェクト
    con.close()

if __name__ == '__main__' :
    db = 'main.db'
    sql = 'SELECT * FROM members;'
    for mem_id, name, _, _ in fetch(db, sql) :
        print("By index:", mem_id, name)
    for row in fetch(db, sql) :
        print("By column name:", row["mem_id"], row["name"])


# 実行してみる
$ SQLITE.py
By index: 100 John
By index: 300 Ash
By index: 500 Q
By column name: 100 John
By column name: 300 Ash
By column name: 500 Q

参考: 12.6. sqlite3 — SQLite データベースに対する DB-API 2.0 インタフェース - 12.6.8.2. 位置ではなく名前でカラムにアクセスする

 

Last modified: 2016-12-19

Page Top

Index

Bw

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


© Shin Nakamura/BasicWerk 2008 - 2017