Python - データベースアクセス

こんにちは、Pythonプログラマー志望の皆さん!Pythonを使ったデータベースアクセスのワクワクする冒険にお気に入りのガイドとしてお付き合いできることを嬉しく思います。プログラミング教育を何年もしてきた者として、このスキルは単に重要でなく、非常にパワフルなものであることを保証できます。では、Pythonを使ったデータベース操作の秘密を解き明かしましょう!

Python - Database Access

Pythonでのデータベースアクセス

あなたが巨大な図書館を整理していると想象してください。数千冊の本があり、それらをすべて追跡するためのシステムが必要です。それは基本的にデータベースが行うことですが、デジタル情報用にです。Pythonは万能な言語であり、データベースと対話するためのいくつかの方法を提供しています。今日は、二つの一般的な方法に焦点を当てます。一つはSQLiteデータベース用のsqlite3モジュールで、もう一つはMySQLデータベース用のPyMySQLモジュールです。

sqlite3モジュール

SQLiteは、Pythonに組み込まれているミニデータベースです。小さなアプリケーションや始めている場合には最適です。まずはモジュールをインポートしましょう:

import sqlite3

この行は、Pythonに「嘿、私たちはSQLiteデータベースで働くので準備してください!」と伝えるのに似ています。

コネクションオブジェクト

データベースで働くためには、まずそれに接続する必要があります。デジタル図書館のドアを叩くのに似ています。これがその方法です:

conn = sqlite3.connect("example.db")

この行は、新しいデータベースファイル「example.db」を作成するか、存在すればそれを開きます。conn変数は、このデータベースへのキーです。

カーソルオブジェクト

デジタル図書館の中に入ったら、動き回り、操作する方法が必要です。それはカーソルが行います。一つを作成しましょう:

cursor = conn.cursor()

カーソルは、あなたのコマンドに従って情報を取得したり修正したりする司書アシスタントと思ってください。

データベーステーブルの作成

いくつかの情報を保存するためのテーブルを作成しましょう。本をカタログ化していると想象してください:

cursor.execute('''CREATE TABLE IF NOT EXISTS books
(id INTEGER PRIMARY KEY,
title TEXT,
author TEXT,
year INTEGER)''')

このSQLコマンドは、「books」という名前のテーブルを作成し、id、title、author、yearのカラムを持つようにします。IF NOT EXISTS部分は、誤って重複のテーブルを作成しないようにします。

INSERT操作

今、データベースにいくつかの本を追加しましょう:

cursor.execute("INSERT INTO books (title, author, year) VALUES (?, ?, ?)",
("To Kill a Mockingbird", "Harper Lee", 1960))
conn.commit()

これは、新しい本をテーブルに挿入します。?マークは、データのためのプレースホルダーであり、SQLインジェクション攻撃(他の日に話すトピックです!)を防ぐ助けになります。commit()メソッドは、変更を保存します。

READ操作

いくつかのデータを取得してみましょう:

cursor.execute("SELECT * FROM books")
books = cursor.fetchall()
for book in books:
print(f"ID: {book[0]}, Title: {book[1]}, Author: {book[2]}, Year: {book[3]}")

これは、すべての本を取得し、それらを印刷します。それは、私たちの司書にすべての本を見せてもらうようなものです。

UPDATE操作

情報を修正する必要があるですか?問題ありません:

cursor.execute("UPDATE books SET year = ? WHERE title = ?", (1925, "The Great Gatsby"))
conn.commit()

これは、「The Great Gatsby」の出版年を更新します。常に変更をコミットすることを忘れないでください!

DELETE操作

時々、エントリを削除する必要があります:

cursor.execute("DELETE FROM books WHERE author = ?", ("J.K. Rowling",))
conn.commit()

これは、J.K. Rowlingの本をすべてデータベースから削除します。DELETE操作には注意してください - データベースには元に戻すボタンはありません!

トランザクションの実行

トランザクションは、操作をまとめる方法です。いずれかの操作が失敗すると、すべてがキャンセルされます。それは、「すべてまたは何も」アプローチです:

try:
conn.execute("BEGIN TRANSACTION")
cursor.execute("INSERT INTO books (title, author, year) VALUES (?, ?, ?)",
("1984", "George Orwell", 1949))
cursor.execute("INSERT INTO books (title, author, year) VALUES (?, ?, ?)",
("Animal Farm", "George Orwell", 1945))
conn.commit()
print("Transaction successful!")
except sqlite3.Error as e:
conn.rollback()
print(f"An error occurred: {e}")

COMMIT操作

私たちは、例示の中でcommit()を使ってきました。これは、データベースに変更を保存するために重要です。これがなければ、変更は接続を閉じると失われます。

ROLLBACK操作

トランザクション中に何かがうまくいかなかった場合、rollback()を使って最後のコミットからの変更を元に戻すことができます:

try:
# データベース操作
conn.commit()
except sqlite3.Error:
conn.rollback()

PyMySQLモジュール

SQLiteは学習や小さなアプリケーションには素晴らしいですが、多くの実際のプロジェクトではより強力なデータベースを使用しています。MySQLをご覧ください。PyMySQLの使い方を簡単に見てみましょう:

import pymysql

conn = pymysql.connect(host='localhost',
user='your_username',
password='your_password',
database='your_database')

try:
with conn.cursor() as cursor:
sql = "INSERT INTO users (email, password) VALUES (%s, %s)"
cursor.execute(sql, ('[email protected]', 'very-secret'))
conn.commit()
finally:
conn.close()

基本的な原理はSQLiteと似ていますが、PyMySQLはリモートのMySQLデータベースに接続することができます。

エラーの処理

データベースを操作する際には、エラーの処理が重要です。常にtry-exceptブロックを使って、潜在的なエラーをキャッチし、処理してください:

try:
# データベース操作
except sqlite3.Error as e:
print(f"An error occurred: {e}")
finally:
conn.close()

これにより、エラーが発生しても優雅に処理し、データベース接続を常に閉じることができます。

以下は、私たちがカバーした主要なデータベース操作をまとめた表です:

操作 説明
Connect データベースへの接続を確立 conn = sqlite3.connect("example.db")
Create 新しいテーブルまたはレコードを作成 cursor.execute("CREATE TABLE...")
Insert テーブルに新しいレコードを追加 cursor.execute("INSERT INTO...")
Select データベースからデータを取得 cursor.execute("SELECT...")
Update 既存のレコードを修正 cursor.execute("UPDATE...")
Delete テーブルからレコードを削除 cursor.execute("DELETE FROM...")
Commit データベースに変更を保存 conn.commit()
Rollback 最後のコミットからの変更を元に戻す conn.rollback()

それでは、これでPythonを使ったデータベースアクセスの第一歩を踏み出しました。これを練習してみましょう。なるべく試して、これらの概念を実験してみてください。知らずにいつの間にか、データ管理がプロのようになっていることに気づくでしょう!幸せなコーディングを、そして常に整理整頓されたデータベースでエラーがないように!

Credits: Image by storyset