mei_13のPython講座 ロゴ

【解説】Pythonでデータベースを操作する:初心者でも基礎から学べるデータの保存と管理




🐍 初心者歓迎!月額4,000円で質問し放題のPython講座
(1時間4,000円の伴走型ビデオチャット指導も受付中!)
🚀 講座の詳細を見る 📩 質問・お問い合わせ

Pythonでデータベースを操作する:初心者でも基礎から学べるデータの保存と管理


Hirokiのアイコン
【Hiroki】 Yukiさん、こんにちは。最近Pythonの学習を進めているのですが、少し困っていることがあるんです。 プログラムで作ったデータを保存したいとき、今はテキストファイルに書き込んでいるのですが、データの数が増えてくると管理がとても大変になってしまって……。 もっと効率的にデータを扱う方法はないでしょうか?


Yukiのアイコン
【Yuki】 Hirokiくん、こんにちは。 そうですね……テキストファイルでの管理は、データの検索や更新が増えてくると、どうしても限界が来てしまうかもしれません。 そんな時は「データベース」という仕組みを使うのが、一番良い解決策だと思います。 データベースは、たくさんのデータを整理して保存し、必要な時にすぐ取り出せるように設計された、情報の「倉庫」のようなものです。 今日は、Pythonからこのデータベースを操作する方法について、一緒に学んでいきましょう。

データベースとは何かを理解する


Hirokiのアイコン
【Hiroki】 データベース、名前は聞いたことがあります! でも、具体的にどういうものなのか、Excelのような表形式のデータとは何が違うのでしょうか?


Yukiのアイコン
【Yuki】 良い質問ですね……。 私たちがよく使うのは「関係データベース(RDBMS)」と呼ばれるもので、Hirokiくんが言う通り、基本的には「テーブル」という表の形式でデータを管理します。 Excelと違う点は、大量のデータを高速に検索できたり、複数のユーザーが同時にアクセスしてもデータが壊れないように保護されていたり、データ同士の複雑な繋がりを定義できたりする点です。 Pythonには、標準で「SQLite」というデータベースエンジンが組み込まれているので、新しくサーバーを立てたりしなくても、すぐに使い始めることができるんですよ。


Hirokiのアイコン
【Hiroki】 Pythonをインストールしただけで、もうデータベースが使える状態なんですね。 それは初心者にとって、すごく心強いです。


Yukiのアイコン
【Yuki】 ええ、そう思います。 SQLiteは、一つのファイルにすべてのデータが保存される仕組みなので、扱いがとても簡単なんです。 誰かの役に立つために作られた、小さくて便利な道具のような存在ですね……。 そんな風に、目立たないけれど誰かを支える仕組みを知ることは、プログラミングを学ぶ上でとても大切だとわたしは思います。

SQLiteを使ってデータベースに接続する


Yukiのアイコン
【Yuki】 それでは、まずはPythonでSQLiteを使うための準備をしましょう。 標準ライブラリの sqlite3 モジュールをインポートするだけで始められます。

import sqlite3

# データベースファイルに接続する
# ファイルが存在しない場合は、新しく作成されます
conn = sqlite3.connect('my_database.db')

# 操作を行うための「カーソル」を作成する
cursor = conn.cursor()

print("データベースに接続しました")

# 最後に接続を閉じる
conn.close()


Hirokiのアイコン
【Hiroki】 「接続」と「カーソル」という言葉が出てきましたね。これはどういう役割なんですか?


Yukiのアイコン
【Yuki】 「接続(Connection)」は、データベースという倉庫への扉を開けて、道を作るイメージです。 そして「カーソル(Cursor)」は、その倉庫の中で実際に作業を行う「作業員さん」のような役割だと思ってください。 SQLという命令をデータベースに届けて、結果を持ってきてもらうのは、このカーソルの仕事になります。

テーブルを作成してデータを定義する


Hirokiのアイコン
【Hiroki】 まずは、データを入れる「箱」が必要ですよね。


Yukiのアイコン
【Yuki】 はい。データベースの中に、どのような形式でデータを保存するかを決める「テーブル」を作成する必要があります。 ここでは例として、ユーザーの情報を保存するテーブルを作ってみましょう。 SQLという専用の言語を使って命令を出します。

import sqlite3

conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()

# usersテーブルを作成するSQL
# id: 整数(主キー), name: テキスト, age: 整数
create_table_sql = '''
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER
)
'''

# SQLを実行する
cursor.execute(create_table_sql)

# 変更を保存(コミット)する
conn.commit()

print("テーブルを作成しました")
conn.close()


Hirokiのアイコン
【Hiroki】 CREATE TABLE IF NOT EXISTS というのは、「もしテーブルがなかったら作る」という意味ですか?


Yukiのアイコン
【Yuki】 その通りです。これをつけておけば、二回目以降の実行で「もうテーブルがあるよ」というエラーが出るのを防げます。 それから、最後に conn.commit() を呼んでいるのがポイントです。 データベースへの変更は、この「コミット」という作業をしない限り、確定されません。 間違えてデータを消してしまっても、コミット前なら取り消せるという、安全のための仕組みなんです。

データの挿入(Create)とプレースホルダの重要性


Hirokiのアイコン
【Hiroki】 箱ができたので、次はデータを入れてみたいです!


Yukiのアイコン
【Yuki】 では、新しいユーザーを追加してみましょう。 ここでとても大切なのが「プレースホルダ」という仕組みを使うことです。

import sqlite3

conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()

# 挿入したいデータ
user_name = "Hiroki"
user_age = 17

# データを挿入するSQL(? はプレースホルダ)
insert_sql = 'INSERT INTO users (name, age) VALUES (?, ?)'

# 第二引数にタプル形式でデータを渡す
cursor.execute(insert_sql, (user_name, user_age))

conn.commit()
print(f"{user_name}くんのデータを登録しました")

conn.close()


Hirokiのアイコン
【Hiroki】 SQLの中に直接変数を書かずに、? を使っていますね。これはどうしてですか?


Yukiのアイコン
【Yuki】 それは、セキュリティを守るためなんです。 もし ? を使わず、文字列の結合などでSQLを作ってしまうと、「SQLインジェクション」という攻撃を受ける隙が生まれてしまいます。 悪意のある入力によって、データベースのデータがすべて盗まれたり、消されたりする恐れがあるんです。 ? を使えば、Pythonのライブラリが安全に値を処理してくれるので、初心者の方こそ、最初からこの書き方を癖にしておくと良いと思います……。

データの取得(Read)


Hirokiのアイコン
【Hiroki】 データを入れることができました。今度は、保存したデータを取り出してみる方法を知りたいです。


Yukiのアイコン
【Yuki】 データを取り出すには SELECT 命令を使います。 cursor.execute() でSQLを実行した後、結果を取得するメソッドを呼び出します。

import sqlite3

conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()

# すべてのユーザーを取得する
cursor.execute('SELECT * FROM users')

# すべての結果をリストとして取得する
rows = cursor.fetchall()

for row in rows:
    # rowはタプル形式で返ってくる(id, name, age)
    print(f"ID: {row[0]}, 名前: {row[1]}, 年齢: {row[2]}")

conn.close()


Hirokiのアイコン
【Hiroki】 fetchall() を使うと、すべての行が一度に取れるんですね。 でも、もしデータが100万件あったら、全部一度に取るのは大変じゃないですか?


Yukiのアイコン
【Yuki】 鋭いですね……その通りです。 大量のデータがある場合は、fetchone() を使って一行ずつ取り出すか、LIMIT 句をSQLに付け加えて、取得する件数を制限するのが一般的です。 必要な時に、必要な分だけを取り出す。それがデータベースを賢く使うコツかもしれません。

データの更新(Update)と削除(Delete)


Hirokiのアイコン
【Hiroki】 データの修正や削除も、同じような流れでできるのでしょうか?


Yukiのアイコン
【Yuki】 はい、基本は同じです。 UPDATE でデータの書き換え、DELETE でデータの削除を行います。 ここでも、どのデータを対象にするかを指定する WHERE 句がとても重要になります。

import sqlite3

conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()

# IDが1のユーザーの年齢を18歳に更新する
new_age = 18
target_id = 1
cursor.execute('UPDATE users SET age = ? WHERE id = ?', (new_age, target_id))

# 名前が "Test" のユーザーを削除する
target_name = "Test"
cursor.execute('DELETE FROM users WHERE name = ?', (target_name,))

conn.commit()
conn.close()


Hirokiのアイコン
【Hiroki】 もし WHERE を書き忘れたら……どうなるんでしょう?


Yukiのアイコン
【Yuki】 ……想像するだけで少し怖いですが、テーブルにあるすべてのデータが更新されたり、消えたりしてしまいます。 操作を実行する前には、対象が正しいか、一呼吸置いて確認するのが大切ですね。 私は心配性なので、いつも何度も見直してしまいます。

より高度な操作:ORM(SQLAlchemy)について


Hirokiのアイコン
【Hiroki】 SQLという言葉を覚えるのは少し大変ですが、プログラムっぽくて面白いですね。 でも、もっとPythonのコードだけで直感的に操作する方法はないのでしょうか?


Yukiのアイコン
【Yuki】 ありますよ。それは「ORM(Object-Relational Mapping)」という仕組みを使う方法です。 有名なものに「SQLAlchemy」というライブラリがあります。 これを使うと、データベースのテーブルをPythonの「クラス」として扱えるようになります。


Hirokiのアイコン
【Hiroki】 クラスとして扱える……ということは、SQLを直接書かなくてもいいんですか?


Yukiのアイコン
【Yuki】 ええ。例えば、データを追加するのも session.add(user_object) のように書けます。 SQLに慣れないうちは難しく感じるかもしれませんが、規模の大きな開発では、プログラムの保守性が高まるのでよく使われています。 ただ、まずは基礎となるSQLと sqlite3 モジュールの使い方を理解しておくことが、遠回りに見えて一番の近道だと思います……。

まとめと学習のアドバイス


Hirokiのアイコン
【Hiroki】 Yukiさん、ありがとうございます! データベースを使うと、データの保存がぐっと本格的になりますね。 まずはSQLiteで、自分なりの小さなツールを作ってみたいと思います。


Yukiのアイコン
【Yuki】 それは素晴らしいですね。 最初は、自分が読んだ本の記録や、日々の学習時間を保存するような、簡単なものから始めてみるのがいいと思います。 自分の書いたコードが、誰かの、あるいは自分自身の役に立つデータとして形に残る。 それは、とても素敵なことだと私は思います……。

もし操作に迷ったら、公式サイトのドキュメントも参考にしてみてくださいね。 少し難しい表現もありますが、正確な情報が載っていますから。


Hirokiのアイコン
【Hiroki】 はい!頑張って挑戦してみます。 また分からないことがあったら、教えてください。


Yukiのアイコン
【Yuki】 ええ、いつでもどうぞ。 Hirokiくんのペースで、一歩ずつ進んでいきましょう。 応援していますね……。



< 組み込み開発
コラム一覧に戻る
iclawler >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
4,000円/60分伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

📩 質問・お問い合わせはこちら



AIアシスタント Yuki