- 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 AUTOINCREMENTid:カラム名INTEGER:整数型PRIMARY KEY:このカラム(id)がメインのキー(ユニークになる)AUTOINCREMENT:レコード追加で1つずつ増えた値が入るname TEXT NOT NULLname:カラム名TEXT:テキスト型NOT NULL:必ず値が入る(NULLを許容しない)age INTEGERage:カラム名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から使用する方法
- アプリケーションに使用する際には、さらに工夫すべき点があると思うので、そこは作りながら学びたい


コメント