PostgreSQL - Python Interface: A Beginner's Guide
こんにちは、未来のデータベースの魔法使いさんたち!私は、ポストgreSQLとPythonの世界にあなたたちを案内するのがとても楽しみです。コンピュータサイエンスを多年間教えてきた者として、この組み合わせはピーナッツバターとジャムのように、とても美味しいものだと言えます。では、腕をまくって、飛び込んでみましょう!
インストール
魔法を起こす前に、道具を準備する必要があります。これは、美食の調理前にキッチンを準備するのと同じです。
1.まず、コンピュータにPostgreSQLがインストールされていることを確認してください。公式のPostgreSQLウェブサイトからダウンロードできます。
2.次に、PostgreSQLと通信するためのPythonモジュールをインストールする必要があります。ターミナルまたはコマンドプロンプトを開き、以下のコマンドを入力します:
pip install psycopg2
このコマンドは、コンピュータに新しいツールを追加するよう依頼することに相当します。これが完了すると、準備は完了です!
Python psycopg2モジュールのAPI
道具が揃ったので、それらが何をできるか簡単に見てみましょう。psycopg2モジュールは、PostgreSQLと対話するための関数セットを提供します。以下は最も一般的なものの表です:
関数 | 説明 |
---|---|
connect() | データベースに接続します |
cursor() | SQLコマンドを実行するためのカーソルオブジェクトを作成します |
execute() | データベース操作(クエリまたはコマンド)を実行します |
fetchone() | クエリ結果セットの次の行を取得します |
fetchall() | クエリ結果のすべて(または残りの)行を取得します |
commit() | 現在のトランザクションをコミットします |
rollback() | 保留中のトランザクションの開始地点に戻します |
close() | データベース接続を閉じます |
これが外国語のように見えるかもしれませんが、焦らずに、私たちは詳細にそれぞれを探求していきます!
データベースへの接続
まず、データベースに接続してみましょう。これは、ドアをノックして中に入ることを依頼することに似ています。
import psycopg2
try:
connection = psycopg2.connect(
database="mydb",
user="myuser",
password="mypassword",
host="localhost",
port="5432"
)
print("接続成功!")
except (Exception, psycopg2.Error) as error:
print("PostgreSQLへの接続中にエラー発生", error)
このコードでは、以下のことを行っています:
- psycopg2モジュールをインポートします
-
connect()
関数を使用して接続を確立します - データベース名、ユーザー、パスワードなど、必要な詳細を提供します
- try-exceptブロックを使用して、潜在的なエラーを処理します
無事に進むと、「接続成功!」が表示されます。おめでとうございます、あなたはデータベースの扉を開いたのです!
テーブルの作成
今では中に入ったので、データを保存するためのテーブルを作成してみましょう。本棚を設置して本を整理するのに似ています。
try:
cursor = connection.cursor()
create_table_query = '''CREATE TABLE books
(ID INT PRIMARY KEY NOT NULL,
TITLE TEXT NOT NULL,
AUTHOR TEXT NOT NULL,
PUBLISHED_DATE DATE);'''
cursor.execute(create_table_query)
connection.commit()
print("テーブル作成成功!")
except (Exception, psycopg2.Error) as error:
print("テーブル作成中にエラー発生", error)
finally:
if connection:
cursor.close()
connection.close()
print("PostgreSQL接続が閉じられました")
ここで起こっていることは以下の通りです:
- カーソルオブジェクトを作成します。これはデータベースアシスタントのようなものです
- 'books'という名前のテーブルを作成するSQLクエリを定義します
- クエリを実行します
- 変更を永続化するためにコミットします
- 最後に、カーソルと接続を閉じて、データベースの好市民 remainします
INSERT操作
棚に本を追加する時がきました!テーブルにレコードをINSERTします。
try:
cursor = connection.cursor()
insert_query = """ INSERT INTO books (ID, TITLE, AUTHOR, PUBLISHED_DATE)
VALUES (%s, %s, %s, %s)"""
record_to_insert = (1, "To Kill a Mockingbird", "Harper Lee", "1960-07-11")
cursor.execute(insert_query, record_to_insert)
connection.commit()
print("レコードが正常に插入されました")
except (Exception, psycopg2.Error) as error:
print("データ插入中にエラー発生", error)
このコードでは以下のことを行っています:
- INSERTクエリを作成し、プレースホルダー(%s)を使用します
- 插入する値を定義します
- クエリを実行し、値を渡します
- 変更をコミットします
SELECT操作
今、棚を確認して、何が入っているか見てみましょう!
try:
cursor = connection.cursor()
select_query = "SELECT * from books"
cursor.execute(select_query)
records = cursor.fetchall()
for row in records:
print("ID:", row[0])
print("TITLE:", row[1])
print("AUTHOR:", row[2])
print("PUBLISHED DATE:", row[3], "\n")
except (Exception, psycopg2.Error) as error:
print("データ取得中にエラー発生", error)
ここで起こっていることは以下の通りです:
- 'books'テーブルからすべてのレコードを取得するSELECTクエリを作成します
- クエリを実行します
-
fetchall()
を使用してすべての結果を取得します - 各結果をループして詳細を表示します
UPDATE操作
あっ、間違えました。レコードを修正しましょう。
try:
cursor = connection.cursor()
update_query = """Update books set AUTHOR = %s where ID = %s"""
cursor.execute(update_query, ("Nelle Harper Lee", 1))
connection.commit()
print("レコードが正常に更新されました")
except (Exception, psycopg2.Error) as error:
print("データ更新中にエラー発生", error)
このコードでは以下のことを行っています:
- UPDATEクエリを作成し、プレースホルダーを使用します
- クエリを実行し、新しい値を渡します
- 変更をコミットします
DELETE操作
最後に、棚から本を削除する方法を学びましょう。
try:
cursor = connection.cursor()
delete_query = """Delete from books where ID = %s"""
cursor.execute(delete_query, (1,))
connection.commit()
print("レコードが正常に削除されました")
except (Exception, psycopg2.Error) as error:
print("データ削除中にエラー発生", error)
finally:
if connection:
cursor.close()
connection.close()
print("PostgreSQL接続が閉じられました")
ここで起こっていることは以下の通りです:
- 削除するためのDELETEクエリを作成し、プレースホルダーを使用します
- クエリを実行し、削除するレコードのIDを渡します
- 変更をコミットします
- 最後に、カーソルと接続を閉じます
そして、ここまでで、PostgreSQLを使用してPythonでデータベースを操作する基本的なことを学びました。練習は完璧を生みますので、さまざまなことを試してみてください。幸せなコーディングを、そしてデータベースは常に完璧な秩序を保ちますように!
Credits: Image by storyset