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