はじめに
PostgreSQLをWIndowsにインストールして、Pythonで動かしてみようと思います。
開発環境
- Windows 10
- Python 3.10.5
PostgreSQLをインストール
Download PostgreSQLのサイトを開きます。Windows x86-64を選択します。現時点では最新版が14.5のようなので、これをダウンロードします。そしてダブルクリック。
Nextをクリック。
変更せず、そのままクリック。
そのままNextをクリック。
Nextをクリック。
パスワードを入力してクリック。
Portは変更せず、そのままクリック。
ここでLocateを、Japanese, Japanに設定しNextをクリック。
Nextをクリック。
Nextをクリック。
インストールが始まります。
Finishをクリックして完了。
pgAdmin4の設定
pgAdmin4は、先程一緒にインストールされたプログラムです。これはPostgreSQLのデータベース操作をGUIでできるツールです。
起動します。
パスワードを聞かれるので、pgAdmin4のパスワードを設定し、OKをクリック。
ServersをクリックするとPostgreSQLのパスワードを聞かれるので、先程設定したパスワードを入力しOKをクリック。
Databasesを右クリックし、Databaseを選択。
ここではDatabaseの名前をdb001とします。もちろん任意の名前でいいです。
Tableの設定をします。
ここでは名前をtbl01とします。Tablespaceはディフォルトのpg_defaultを選択します。
次にColumnsを選択し、右上の+をクリックしてName及びData typeを以下のように設定してSaveをクリック。
Name | Data type |
serial_num | serial |
name | text |
これで一応設定が完了します。
PythonでPostgreSQLにアクセスする
PythonでPostgreSQLに接続し、データベースのテーブルにデータの挿入、消去などを行ってみます。
import psycopg2
dsn = "dbname=db001 host=localhost user=postgres password=Password"
conn = psycopg2.connect(dsn)
cur = conn.cursor()
cur.execute("select version()")
print(cur.fetchone())
cur.execute("insert into tbl01 (name) values ('オレンジ')")
conn.commit()
cur.execute("insert into tbl01 (name) values ('レモン')")
conn.commit()
cur.execute("select * from tbl01")
print(cur.fetchall())
cur.execute("delete from tbl01")
conn.commit()
cur.execute("select * from tbl01")
print(cur.fetchall())
cur.execute("insert into tbl01 (name) values ('ニンジン')")
conn.commit()
cur.execute("insert into tbl01 (name) values ('タマネギ')")
conn.commit()
cur.execute("select * from tbl01")
print(cur.fetchall())
cur.execute("delete from tbl01")
conn.commit()
cur.execute("select * from tbl01")
print(cur.fetchall())
cur.execute("select setval ('tbl01_serial_num_seq', 1, false)")
conn.commit()
cur.execute("insert into tbl01 (name) values ('ブタニク')")
conn.commit()
cur.execute("insert into tbl01 (name) values ('トリニク')")
conn.commit()
cur.execute("select * from tbl01")
print(cur.fetchall())
cur.execute("delete from tbl01")
conn.commit()
cur.execute("select * from tbl01")
print(cur.fetchall())
cur.execute("select setval ('tbl01_serial_num_seq', 1, false)")
conn.commit()
# Closed
cur.close()
conn.close()
簡単にプログラムの説明をします。
dsn = "dbname=データベース名 host=localhost user=postgres password=パスワード"
データベース名とパスワードは上で設定したものを入れます。
cur.execute("select setval ('tbl01_serial_num_seq', 1, false)")
conn.commit()
このコマンドがないと、データを消去してもserilal_numの値が初期化されず更新されます。このコマンドを実行することにより値が1に設定されます。
「tbl01_serial_num_seq」は、「テーブル名 + _カラム名 + _seq」という規則で構成されます。
プログラムを実行すると以下のメッセージが表示されると思います。
('PostgreSQL 14.5, compiled by Visual C++ build 1914, 64-bit',)
[(1, 'オレンジ'), (2, 'レモン')]
[]
[(3, 'ニンジン'), (4, 'タマネギ')]
[]
[(1, 'ブタニク'), (2, 'トリニク')]
[]