Python datasetの使用

datasetとは?

Pythonで簡単にデータベースを扱うことができるライブラリ(ORマッパー)

公式ページ

準備

インストール

pip install dataset

インポート

import dataset

データベースの接続とテーブル取得

接続:db = connect(接続先)

テーブル取得:db[テーブル名]

SQLite

db = dataset.connect('sqlite:///ファイル名')

db = dataset.connect('sqlite:///hanbai.db')

table = db['shouhin']

MySQL

db = dataset.connect('mysql://ユーザ名:@localhost/データベース名?charset=utf8')

db = dataset.connect('mysql://root:@localhost/hanbai?charset=utf8')

table = db['shouhin']

検索

テーブルのfindメソッド。引数に条件を書く。戻り値は列名の辞書の形で行が返される。

全検索

results = table.find()

for record in results:
    print(record['sid'],record['sname'],record['tanka'])

条件付き検索

# sname が りんご
results = table.find(sname='りんご')

# tankaが150より大きい
results = table.find(tanka={'>': 150})

# snameに「ん」が付く
results = table.find(sname={'like':'%ん%'})

整列

findメソッドの引数に order_by で列名を指定する。
降順の場合には列名の前に - を付ける。
複数キーの場合、リストで指定。

# tankaの昇順
results = table.find( order_by='tanka')

# tankaの降順
results = table.find( order_by='-tanka')

# tankaの昇順、同じ場合、sidの降順
results = table.find( order_by=['tanka','-sid'])

行数の限定

findメソッドの引数に _limit で行数を指定する。

# 3行だけ表示
results = table.find( _limit=3 )

findメソッドの引数に _offset で開始位置の指定も可能。

# 3行目から3行だけ表示
results = table.find( _limit=3, _offset=3 )

サンプル

import dataset

db = dataset.connect('sqlite:///hanbai.db')
table = db['shouhin']

results = table.find()
for record in results:
    print(record['sid'],record['sname'],record['tanka'])

1行のみ検索

結果が1行のみの場合にはfind_oneメソッドで引数に条件を指定する。

record = table.find_one(sid=1)
print(record['sname'])

更新SQLの実行

行の追加

テーブルのinsertメソッド。引数に辞書で行を指定。

data = {'sname':'にんじん', 'tanka':120}
table.insert(data)

行の変更

テーブルのupdateメソッド。引数に辞書で行を指定。第二引数にキーの列名をリストで指定。

data = {'sid':5,'sname':'かき', 'tanka':120}
table.update(data,['sid'])

行の削除

テーブルのupdateメソッド。引数にキーを指定。

table.delete(sid=5)

SQLの実行

データベースのqueryメソッドでSQLを指定する。

results = db.query('SELECT sid,SUM(kosu) FROM uriage GROUP BY sid')
for record in results:
    print(record['sid'],record['SUM(kosu)'])