この記事ではPythonを使用してSQLiteデータベースでテーブルを作成し、スキーマを定義する方法について解説します。具体的なコード例とその詳細な解説、さらには応用例も含めています。
はじめに
SQLiteは軽量で高速なリレーショナルデータベースであり、Pythonとの連携も容易です。しかし、データベースとしての基本的な要素である「テーブル作成」と「スキーマ定義」については、文献やオンラインの情報が散逸しているため、総合的な理解が難しい場合があります。この記事では、それらのテクニックをPythonを用いて体系的に解説します。
基本的なテーブルの作成
Pythonの標準ライブラリに含まれる`sqlite3`を使用して、最も基本的なテーブルを作成する方法を解説します。
サンプルコード
import sqlite3
# SQLiteデータベースに接続
conn = sqlite3.connect('sample.db')
# カーソルオブジェクトを作成
c = conn.cursor()
# テーブルを作成
c.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')
# 変更をコミット
conn.commit()
# 接続を閉じる
conn.close()
コードの解説
1. `import sqlite3`: sqlite3モジュールをインポートします。
2. `sqlite3.connect(‘sample.db’)`: `sample.db`という名前のSQLiteデータベースに接続します。
3. `conn.cursor()`: カーソルオブジェクトを作成します。このオブジェクトでSQLクエリを実行します。
4. `CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)`: `users`という名前のテーブルを作成します。テーブルには`id`, `name`, `age`という3つのカラムがあります。
5. `conn.commit()`: データベースへの変更をコミット(保存)します。
6. `conn.close()`: データベース接続を閉じます。
スキーマの定義
SQLiteでは、テーブル作成時にそのスキーマ(テーブルの構造や制約)も定義することができます。このセクションでは、よく使われるスキーマの要素をいくつか紹介します。
主キー(Primary Key)
主キーは、テーブル内で各レコードを一意に識別するためのキーです。
# 主キーを設定する例
c.execute('CREATE TABLE IF NOT EXISTS orders (order_id INTEGER PRIMARY KEY, product_name TEXT)')
NOT NULL制約
特定のカラムにNULL(未設定)を許可しないようにする制約です。
# NOT NULL制約を設定する例
c.execute('CREATE TABLE IF NOT EXISTS customers (customer_id INTEGER PRIMARY KEY, name TEXT NOT NULL)')
UNIQUE制約
特定のカラムの値がテーブル内で一意であることを保証する制約です。
# UNIQUE制約を設定する例
c.execute('CREATE TABLE IF NOT EXISTS employees (employee_id INTEGER PRIMARY KEY, email TEXT UNIQUE)')
応用例1:複合主キー
複数のカラムを組み合わせて一つの主キーとすることも可能です。
# 複合主キーを設定する例
c.execute('CREATE TABLE IF NOT EXISTS order_details (order_id INTEGER, product_id INTEGER, PRIMARY KEY(order_id, product_id))')
応用例1の解説
`order_details`テーブルでは、`order_id`と`product_id`の組み合わせが一意になるように複合主キーが設定されています。
応用例2:外部キー制約
他のテーブルの主キーを参照する外部キーを設定することも可能です。
# 外部キー制約を設定する例
c.execute('CREATE TABLE IF NOT EXISTS order_details (order_id INTEGER, product_id INTEGER, FOREIGN KEY(order_id) REFERENCES orders(order_id))')
応用例2の解説
`order_details`テーブルの`order_id`は、`orders`テーブルの`order_id`を外部キーとして参照しています。
まとめ
PythonとSQLiteを用いたテーブルの作成とスキーマ定義には多くの選択肢と細かい設定があります。この記事では基本的なテーブル作成から、より高度なスキーマ定義まで解説しました。これを機に、PythonとSQLiteを使ってデータベース操作の幅を広げてみてはいかがでしょうか。
コメント