サイトアイコン KOKENSHAの技術ブログ

PythonでSQLiteテーブルの作成と削除

SQLiteは聞いたことがありますよね

一回特徴だけをまとめて、簡単に説明します。

目次

ゼロ設定

SQLite は、使うために「インストール」する必要がありません。今回も実際下のプログラムを実行してみましたが、imoportするだけで使えます!
設定がありません、ユーザーのアクセス権限設定、などもありません。

サーバレス

mySQLなどと違って、サーバーを立てる必要がありません。
SQLite の場合は、データベースをアクセスしたいプロセスは、ディスク上のデータベースファイルを直接、読んで、書きます。中継するサーバプロセスはありません。

単一のデータベースファイル

SQLite データベースは、単一の普通のディスクファイルで、ディレクトリ階層のどこに置いてもかまいません。
SQLite がそのディスクファイルを読むことができれば、それは、そのデータベースの全てを読むことができます。
データベースファイルは、簡単に USB メモリスティックにコピーしたり、電子メールで共用できます。

クロスプラットフォームのデータベースファイル

SQLite のファイル形式はクロスプラットフォームです。
あるマシンで書かれたデータベースファイルは
異なるアーキテクチャの別のマシンに複写して、使うことができます。

コンパクト

全てを有効にした SQLite ライブラリ全体は、500KiB 以下の大きさ です。
コンパイル時に不必要な機能を無効にしたら
ライブラリの大きさを、さらに小さく、300KiB 以下にすることもできます。

マニフェスト型付け

SQLite は、マニフェスト型付けを使って、マニフェスト型付けでは、データ型は、値自身の属性です。その値が格納されるカラムの属性ではありません。なので、SQLite は、ユーザが、いかなるデータ型のいかなる値も、任意のカラムに格納することを許します。

可変長のレコード

SQLite は、行にある情報を格納するために実際に必要なディスク領域だけを使います。

オープソース

https://sqlite.org

サンプルコード

早速今回実行するサンプルコードを見てみましょう!

(動作確認できた環境はPython 3です。)

import sqlite3
from contextlib import closing

def test_sqlite3():
  dbname = 'database.db'
  with closing(sqlite3.connect(dbname)) as conn:
      con = conn.cursor()

      # executeメソッドでSQL文を実行する
      # ここでは、もしusersテーブルが存在していたら、一旦削除します。
      drop_table = '''drop table if exists users'''
      con.execute(drop_table)
      # ここでは、もしusersテーブルが存在していなかったら、作成します。
      create_table = '''create table if not exists users (id int, name varchar(64), age int, gender varchar(32))'''
      con.execute(create_table)

      # SQL文に値をセットする場合は,Pythonのformatメソッドなどは使わずに,
      # セットしたい場所に?を記述し,executeメソッドの第2引数に?に当てはめる値を
      # タプルで渡す.
      sql = 'insert into users (id, name, age, gender) values (?,?,?,?)'
      user = (1, '高橋', 34, 'male')
      con.execute(sql, user)

      # 一度に複数のSQL文を実行したいときは,タプルのリストを作成した上で
      # executemanyメソッドを実行する
      insert_sql = 'insert into users (id, name, age, gender) values (?,?,?,?)'
      # タプルデータの配列
      users = [
          (2, '斎藤', 23, 'male'),
          (3, '井上', 34, 'mail'),
          (4, '水谷', 32, 'female'),
          (5, '小林', 19, 'male')
      ]
      con.executemany(insert_sql, users)
      conn.commit()

      select_sql = 'select * from users'
      for row in c.execute(select_sql):
          print(row)

少しmySQLなどの経験があれば、すぐ理解できるプログラムですね。

とても簡単ですね。

私、自分のプロジェクトでmySQLを使ったり、昔会社の業務システムでOracle SQLServerを使った経験がありますが

SQLiteで本当に手軽に使えていいですね。

そんな、大規模の、ミッションクリティカル出ない場面でしたら、手取り早いですね。

もっと情報を参照したいときは、こちらへどうぞ

https://docs.python.jp/3/library/sqlite3.html

最新版が

SQLite Release 3.24.0 On 2018-06-04

4日前ですね!

[amazonjs asin=”0596521189″ locale=”JP” title=”Using SQLite”]

[amazonjs asin=”479811944X” locale=”JP” title=”SQLite入門 第2版”]

モバイルバージョンを終了