見出し画像

PostgreSQLをPython+Anacondaで動かしてみる

注意:本記事は作成にLLMが一部用いられています。

Python と Anaconda 環境で PostgreSQL をインストールしてデータベースを作成する方法

この記事では、Python と Anaconda 環境で PostgreSQL をインストールし、新しいデータベースを作成する方法について説明します。


1. PostgreSQL のインストール

まず、Anaconda Prompt を開き、以下のコマンドを実行して PostgreSQL をインストールします。

conda install -c anaconda postgresql

インストールが完了したら、以下のコマンドで PostgreSQL のバージョンを確認します。

postgres --version

2. PostgreSQL サーバーの初期化

次に、以下のコマンドを実行して PostgreSQL サーバーを初期化します。

initdb -D /path/to/your/data/directory

`/path/to/your/data/directory` は、PostgreSQL のデータを保存するディレクトリのパスに置き換えてください。

3. PostgreSQL サーバーの起動

PostgreSQL サーバーを起動するには、以下のコマンドを実行します。

pg_ctl -D /path/to/your/data/directory start

4. PostgreSQL シェルへの接続

PostgreSQL シェルに接続するには、以下のコマンドを実行します。

psql -U postgres

`postgres` はデフォルトのユーザー名です。必要に応じて変更してください。

新規でアカウントを作成する場合は、以下のコマンドを実行して、PostgreSQL のデフォルトのスーパーユーザーロールを作成します。

createuser -s postgres

`psql -U postgres` でシェルに接続後、以下のコマンドでパスワードを設定します。

ALTER USER postgres PASSWORD 'your_password';

5. データベースの作成

PostgreSQL シェルで以下のコマンドを実行して、新しいデータベースを作成します。

CREATE DATABASE your_database_name;

`your_database_name` は、作成するデータベースの名前に置き換えてください。

6. データベースへの接続

以下のコマンドを実行して、作成したデータベースに接続します。

\c your_database_name

7.Python から PostgreSQL データベースに接続

Python から PostgreSQL データベースに接続するには、`psycopg2` ライブラリを使用します。以下のコマンドでインストールできます。

conda install -c anaconda psycopg2

以上の手順で、Python と Anaconda 環境で PostgreSQL をインストールし、新しいデータベースを作成することができました。

8. Python で DB を操作する

PostgreSQL データベースに接続し、テーブルの作成、データの挿入、更新、削除などの操作を行うには、以下のようなサンプルプログラムを使用します。

import psycopg2

# データベースに接続
conn = psycopg2.connect(
    host="localhost",
    database="your_database_name",
    user="postgres",
    password="your_password"
)

# カーソルを作成
cur = conn.cursor()

# テーブルを作成
cur.execute("""
CREATE TABLE IF NOT EXISTS employees (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    department VARCHAR(100),
    salary NUMERIC(10, 2)
)
""")

# データを挿入
cur.execute("""
INSERT INTO employees (name, department, salary)
VALUES
    ('John Doe', 'Sales', 5000.00),
    ('Jane Smith', 'Marketing', 6000.00),
    ('Michael Johnson', 'Engineering', 7000.00)
""")

# 変更をコミット
conn.commit()

# データを取得
cur.execute("SELECT * FROM employees")
rows = cur.fetchall()
print("データ挿入後:")
for row in rows:
    print(row)

# データを更新
cur.execute("UPDATE employees SET salary = 5500.00 WHERE name = 'John Doe'")
conn.commit()

# データを取得
cur.execute("SELECT * FROM employees")
rows = cur.fetchall()
print("\nデータ更新後:")
for row in rows:
    print(row)

# データを削除
cur.execute("DELETE FROM employees WHERE name = 'Jane Smith'")
conn.commit()

# データを取得
cur.execute("SELECT * FROM employees")
rows = cur.fetchall()
print("\nデータ削除後:")
for row in rows:
    print(row)

# テーブルからすべてのデータを削除
cur.execute("DELETE FROM employees")
conn.commit()

# データを取得
cur.execute("SELECT * FROM employees")
rows = cur.fetchall()
print("\nデータ削除後:")
for row in rows:
    print(row)

# テーブルを削除
cur.execute("DROP TABLE IF EXISTS employees")
conn.commit()

# 接続を閉じる
cur.close()
conn.close()

このサンプルプログラムでは、以下の操作を行っています。

  1. `psycopg2` ライブラリを使用して、PostgreSQL データベースに接続します。接続情報(ホスト、データベース名、ユーザー名、パスワード)を指定します。

  2. `cursor()` メソッドを使用して、カーソルを作成します。カーソルは、データベースとのやり取りに使用されます。

  3. `execute()` メソッドを使用して、SQL クエリを実行します。ここでは、`employees` テーブルを作成しています。

  4. `execute()` メソッドを使用して、`employees` テーブルにデータを挿入します。

  5. `commit()` メソッドを使用して、変更をコミットします。

  6. `execute()` メソッドと `fetchall()` メソッドを使用して、データを取得し、結果を表示します。

  7. `execute()` メソッドを使用して、データを更新します。ここでは、特定の従業員の給与を更新しています。

  8. 再度データを取得し、更新後の結果を表示します。

  9. `execute()` メソッドを使用して、データを削除します。ここでは、特定の従業員を削除しています。

  10. 再度データを取得し、削除後の結果を表示します。

  11. `execute()` メソッドを使用して、テーブルからすべてのデータを削除します。

  12. 再度データを取得し、削除後の結果を表示します。

  13. `execute()` メソッドを使用して、テーブルを削除します。

  14. `close()` メソッドを使用して、カーソルと接続を閉じます。

このサンプルプログラムを実行すると、データベースとのやり取りが行われ、テーブルの作成、データの挿入、更新、削除などDBを利用するうえでの基本的な操作が実行されます。

9. 最後に

データベースは、アプリケーションやシステムの開発において非常に重要な役割を果たします。以下は、データベースを使用する主な利点です。

  1. データの一貫性と整合性の維持: データベースは、データの一貫性と整合性を維持することができます。これにより、データの重複や矛盾を防ぎ、信頼性の高いデータを保証できます。

  2. データの永続性: データベースは、データを永続的に保存することができます。これにより、アプリケーションやシステムが停止しても、データが失われることがありません。

  3. データの共有と同時アクセス: データベースは、複数のユーザーやアプリケーションがデータを共有し、同時にアクセスすることを可能にします。これにより、効率的なデータの管理と利用が可能になります。

  4. データの検索と分析: データベースは、大量のデータを効率的に検索し、分析することができます。これにより、ビジネスインテリジェンスや意思決定に役立つ洞察を得ることができます。

  5. セキュリティとアクセス制御: データベースは、データへのアクセスを制御し、セキュリティを確保することができます。これにより、機密情報の保護と不正アクセスの防止が可能になります。

本記事では、Python と Anaconda 環境で PostgreSQL をインストールし、新しいデータベースを作成する方法について説明しました。
また、`psycopg2` ライブラリを使用して、Python からデータベースに接続し、テーブルの作成、データの挿入、更新、削除などの基本的な操作を行う方法を示しました。

データベースは、アプリケーションやシステムの背後で動作し、データの管理と永続化を担っています。
開発者にとって、データベースの適切な設計と操作は、アプリケーションの性能、信頼性、およびスケーラビリティに大きな影響を与える可能性があります。

私は、かつて、自分のプロジェクトにおいて、
Python にて JSON データを生成させることで独自のデータベースを作成していました。(当時はDBの概念を知らなかった)
しかし、この方法では、データの整合性を維持することが難しく、大量のデータを扱う場合にパフォーマンスが低下するという問題が発生していました。
また、独自のデータベースインフラストラクチャを構築することは、ソートアルゴリズムの実装や、データの型管理など、多くの複雑な作業を伴います。
さらに応答速度まで考慮にいれると、DBを独自開発する理由は皆無に等しい状況です。
今回、PostgreSQLを使ってみた感じ、比較的かんたんに環境を構築でき、操作も数行で行えるため、小規模アプリケーション開発におけるデータ管理においては、DB導入を検討することをおすすめします。

10.おまけ - Render DBに接続する

上記コードについて、RenderのPostgreSQLに接続する方法を示します。前提として、RenderのDBは作成済みということとします。

Renderダッシュボードより、Connectionsを表示し、PSQL Commandをコピーしましょう。

一例として以下のようなPSQLコマンドが表示されます。

PGPASSWORD=password psql -h host.singapore-postgres.render.com -U user database

上記コマンドを以下のように分岐させ、connectを設定してください。
またportには、Connectionsに表示されたポート番号を入力してください。

conn = psycopg2.connect(
    host='host.singapore-postgres.render.com',
    port=6543,
    database='database',
    user='user',
    password='password'
)

上記設定にて、オンライン上にある、Render DBの書き換えを行うことができます。

11.おまけ - SQL操作コマンドメモ一覧

PowerShellにて、DBを操作する方法コードメモ

psqlをインストール

scoop install postgresql

Render DB に接続

$env:PGPASSWORD="data"; psql -h Database-URL -p portnum -U username -d dbname

DBのテーブルをすべて表示する

\dt

DBのデータをすべて消去する

DROP SCHEMA public CASCADE;
CREATE SCHEMA public;

テーブル内の列を表示する

\d table_name

テーブル内のデータを表示する

SELECT * FROM table_name;

テーブルを消去する

DROP TABLE テーブル名;

テーブルに列を追加する

  • table_name: 変更するテーブルの名前を指定します。

  • column_name: 追加する新しい列の名前を指定します。

  • data_type: 新しい列のデータ型を指定します(例: INTEGER、VARCHAR、BOOLEAN など)。

  • [constraints](オプション): 新しい列に適用する制約を指定します(例: NOT NULL、UNIQUE、DEFAULT など)。

ALTER TABLE table_name ADD COLUMN column_name data_type [constraints];

テーブルの列を消去する

ALTER TABLE public.Table_name DROP COLUMN Line_name;

DBを、PowerShellから切断をする。

\q


この記事が気に入ったらサポートをしてみませんか?