茨城エンジニアのPython開発日記

茨城のITベンチャー企業ではたらく2年目エンジニア。Pythonで色々なものを作成中。

PostgreSQLのデータベースにpythonからアクセスしてみた


ブログから記事を見つけたい場合はこちら

ブログ地図 - 茨城エンジニアのPython開発日記

こんにちは松原です。
今期はワールドトリガーだけみてます。

今日はデータベースについてみていきます。
djangoでデータベースに少し触れましたが、一般的なSQLとかを全く使ったことがない。
最低限の教養な気がしてるので、習うより慣れろでとにかくやってみる。

とりあえず、以下の手順でやっていきます。
今日は1つ目だけ。

1. PostgreSQLで自分のPCにデータベース作成→自分のPCからPythonでアクセス
2. PostgreSQLで作成したEC2(aws)上のデータベースに自分のPCからPythonでアクセス
3. 2のデータベースサーバ上からPythonで画像を取得, 表示

ここまでできれば、どんなデータも一応はデータベースから取ってこれるようになるかなと。
で、今日はこの順番でやります。

1-1. PostgreSQLのインストール
1-2. SQLshellからデータベースをいじる
1-3. pythonからデータベースに接続

1. postgresqlのインストール

データベースやらテーブルやらを管理してくれるPostgreSQLをインストールする。
インストールはここから
Download PostgreSQL

途中で入力するパスワードは後で使うので、堅牢なものにしてメモしておく。

2. SQLshellからデータベースをいじる

PostgreSQLをインストールしたときに一緒にインストールされるSQLshellからデータベースをいじれます。
ここで作るだけ作って、あとでそれをPythonでみる。

スタートバーからSQLshellを検索, 実行。
エンターを押して行って、パスワードだけ1で設定したものを入力する。
f:id:tottorisnow33:20211212172512p:plain

とりあえず初期設定ではlocalhostのポート番号5432にある様子。
データベースをインターネットの海に放りこんだ場合でも、IPアドレスとポート番号等を指定すればこのデータベースにたどり着けるはず。
接続元の設定に注意だけど、今回はlocalhostlocalhostのアクセスなので大丈夫。


データベース→テーブル→列やら行やらって階層構造があるらしく、それぞれをいじれる。
で、CUI上のコマンドはこちらを参考。
postgreSQLとSQL Shellを使ったpsqlコマンドでデータのリレーションをする方法を詳しく解説

一応めぼしいもののメモだけ書いておく。(コピペ用)
・データベース一覧
\l

・データベース作成
CREATE DATABASE mydb

・アクティブなデータベース変更
\c mydb

・テーブル作成
CREATE TABLE person(
id INT,
name VARCHAR(50),
birth_day DATE);

・テーブル一覧(?)
\d

・テーブル確認
\d person

・テーブルに実体としてのデータ入力
INSERT INTO person(
name,
birth_day)
VALUES('matsu', data '2001-12-01' );

このインサートを終えた後にselect * from personを実行すると、ちゃんと入っています。うれしい。
f:id:tottorisnow33:20211212175250p:plain

3. pythonからデータベースに接続

とりあえず値を引っ張ってきてprintするところまで。
ここを参考。
PythonからPostgreSQLに接続する方法 | アシスト

なんにせよライブラリをインストール。

conda install psycopg2

これがデータベースに接続, 値をprintするソースコード

import psycopg2

#接続IPアドレス, ポート番号, データベース名等を指定してデータベースに接続
#EC2のデータベースにアクセスするときはlocalhostのところにIPアドレスを書き込むはず
connection = psycopg2.connect("host=localhost port=5432 dbname=mydb user=postgres password=xxxxxxx")
connection.get_backend_pid()

#SQLを実行するためのなにかを持ってきている
#なんだこれ
#おそらくデータベースmydbをいじるためのUI
cur = connection.cursor()

#SQL実行
cur.execute("select version()")
cur.execute("select id ,name from person")

for row in cur:
	print(row[0], row[1]) # 各行の0,1番目の列の結果を取り出す


うーーーーーーーーーーーーーーーーーーーん。
恥ずかしながらSQLの基礎が弱いから、最後の部分でなにやってるかよくわかっていない。勉強しないと…

なにはともあれスクリプトからデータベースにアクセスするパスは通りました。
広げていくためのたたき台程度ということで。

それではまた次回。