- Pythonのsqlite3を初めて使用した(SQLもほとんど初めて)
- 基本的な動かし方を確認
- 一通り動作・書き方を確認するためのサンプルコードを作成、動きを確認
- サンプルコードは各動作の疎結合を意識した
サンプルコード
import sqlite3
import os
# DBに接続
def open_db():
# pyファイルと同階層を指定
script_dir = os.path.dirname(os.path.abspath(__file__))
db_path = os.path.join(script_dir, "example.db")
# dbファイルに接続
conn = sqlite3.connect(db_path)
return conn
# DBの初期化
def init_db(conn):
# 既存の users テーブルがあれば削除する
conn.execute("DROP TABLE IF EXISTS users")
# テーブル users を作成
conn.execute(
'''
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
)
'''
)
# サンプルデータの挿入
def insert_db(conn):
# データの挿入
conn.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 30))
conn.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Bob', 25))
# 変更内容のコミット
conn.commit()
# データの全件取得
def select_db(conn):
rows = conn.execute(("SELECT id, name, age FROM users"))
for row in rows:
print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}")
if __name__ == '__main__':
# DBに接続
with open_db() as conn:
# DBの初期化
init_db(conn)
# サンプルデータの挿入
insert_db(conn)
# データの全件取得
select_db(conn)
実行結果
- 挿入したデータが表示される
ID: 1, Name: Alice, Age: 30
ID: 2, Name: Bob, Age: 25
コード解説
コードの構成
各操作を関数ごとにまとめることを意識した
- DBに接続(
open_db()
) - DBの初期化・テーブルの作成(
init_db(conn)
) - データの挿入(
insert_db(conn)
) - データの取得(
select_db(conn)
)
DBに接続(open_db())
def open_db():
# pyファイルと同階層を指定
script_dir = os.path.dirname(os.path.abspath(__file__))
db_path = os.path.join(script_dir, "example.db")
# dbファイルに接続
conn = sqlite3.connect(db_path)
return conn
- データベース
example.db
に接続 - 指定のデータベースが無い場合は作成
- 実行Pythonファイルと同じ階層を指定するため、
os.path
を使ってパスを設定 - データベース接続オブジェクト
conn
を返り値で返す
DBの初期化・テーブルの作成(init_db(conn))
def init_db(conn):
# 既存の users テーブルがあれば削除する
conn.execute("DROP TABLE IF EXISTS users")
# テーブル users を作成
conn.execute(
'''
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
)
'''
)
- ※
conn.execute(【処理内容】)
でクエリ処理を実行できる - テーブル
users
を作成する- 既にある場合は削除してから作成
- この処理を入れないと、後のデータ挿入で実行のたびに同じデータが増えるため、この処理を入れた
- クエリ処理(テーブル作成)
CREATE TABLE users ()
CREATE TABLE users ()
:テーブルusers
を作成- ()でテーブル内容の定義
id INTEGER PRIMARY KEY AUTOINCREMENT
id
:カラム名INTEGER
:整数型PRIMARY KEY
:このカラム(id
)がメインのキー(ユニークになる)AUTOINCREMENT
:レコード追加で1つずつ増えた値が入るname TEXT NOT NULL
name
:カラム名TEXT
:テキスト型NOT NULL
:必ず値が入る(NULLを許容しない)age INTEGER
age
:カラム名INTEGER
:整数型
データの挿入(insert_db(conn))
def insert_db(conn):
# データの挿入
conn.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 30))
conn.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Bob', 25))
# 変更内容のコミット
conn.commit()
- クエリ処理(データ挿入)
INSERT INTO users (name, age) VALUES (?, ?)"
INSERT INTO users
:テーブルusers
に挿入(name, age)
:name
・age
カラムに挿入VALUES (?, ?)"
:値として後から指定した値が入る(プレースホルダーの使用)- 今回は
('Alice', 30)
('Bob', 25)
データの取得(select_db(conn))
def select_db(conn):
rows = conn.execute(("SELECT id, name, age FROM users"))
for row in rows:
print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}")
- クエリ処理(データの全件取得)
SELECT id, name, age FROM users
- テーブル
users
からカラムid
,name
,age
の値を取得
- テーブル
- for文で1セットずつ取り出して出力
まとめ
- クエリ処理は効率的な処理や大規模の処理など、工夫する点はたくさんあるが、今回は基本的な処理の確認のみ実施
- 簡単なクエリの書き方
- Pythonから使用する方法
- アプリケーションに使用する際には、さらに工夫すべき点があると思うので、そこは作りながら学びたい
コメント