PythonでSQLiteを使ってテーブル作成とスキーマ定義を理解する

この記事では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を使ってデータベース操作の幅を広げてみてはいかがでしょうか。

コメント

コメントする

目次