【Python】【SQlite】SQliteを操作

PythonでSQLiteを操作する必要性があったのでメモ書き程度に残しておこうと思う.

環境

  • Fedora 29 (Work Station)
  • Python 3.6
  • SQLite 3

手順

1. データベースの作成

SQLite3を用いて,予めデータベースを構築しておく.

今回は下記のような簡単なモデルを想定してみよう

create table person(
    name string,
    age int,
    sex booolean // とりあえずtrueをmaleとして扱ってみよう
);

これをperson.dbとでもしておこう

2. モジュールのインポート

import句で,SQLite3用のモジュールを取り込む

import sqlite3

なんてことはない,いつも使っているやつだ.

3. Pythonとデータベースを接続する

肝心なのはここからだ.
とりあえず接続手順のコードを先に見てみようと思う

connection = sqlite3.connect(person.db)
connection.row_factory = sqlite3.Row // これ無くてもいいやつ
sql = connection.cursor()

正直ここらへんはおまじないとして覚えてしまってもいいかもしれない.

connectで接続して,cursorで操作するような認識でいいと思う.じゃあ2行目の奴がなにしてるかっていうと,データベースのカラム名でアクセスできるようになるらしい.要するに辞書型で返り値を得られるということだ.

4. データベースに命令を発行してみる

接続できたところでデータベースにコマンドを発行してみたいとおもう.

データを追加する

今回も先ずはコードを見てみたいとおもう.

insert = 'insert into person(name, age, sex) values (?, ?, ?)'
data = ('john', 24, true)
sql.execute(insert, data)
connection.commit()

これも見たまんまだ.

SQLite3のinsert文を発行して,タプルで引数を渡してやってるだけ.重要なのは,仮に引数が一つしかない時もタプルで渡してやらないといけない.地味に引っかかるポイントではないだろうか.

あと,データベースへの書き込みが発生するような場合には,実行後にconnection.commitを実行する必要がある.こいつを実行して初めて実際に書き込まれるらしい.バッファリングされてるだけなのかな??

データを取得する

逆に,データベースから取得する例も見てみよう.

selection = 'select * from person where name = ?'
key = ('john',)
sql.execute(selection, key)
rows = sql.fetchall()

取り敢えず意味もなくwhere句を付け足して置いた.これで引数は一つだけなわけだが,タプルで与えないといけないので無理矢理タプル表現をする必要があるのがわかるだろう.

executeを発行した後にfetchallを発行することで,結果をイテレータとして得ることができる.あと,row_factory指定をしているので,下記のような感じで各要素にアクセスできる.

for row in rows:
  tmp = {
    'name' : row['name'],
    'age' : row['age'],
    'sex' : row['sex']}
  print(tmp)

あとはあれか,開けたら閉めましょう.人間として当然の行いです.

connection.close()

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です