PostgreSQLのデータベースに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で設定したものを入力する。
とりあえず初期設定ではlocalhostのポート番号5432にある様子。
データベースをインターネットの海に放りこんだ場合でも、IPアドレスとポート番号等を指定すればこのデータベースにたどり着けるはず。
接続元の設定に注意だけど、今回はlocalhost→localhostのアクセスなので大丈夫。
データベース→テーブル→列やら行やらって階層構造があるらしく、それぞれをいじれる。
で、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を実行すると、ちゃんと入っています。うれしい。
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の基礎が弱いから、最後の部分でなにやってるかよくわかっていない。勉強しないと…
なにはともあれスクリプトからデータベースにアクセスするパスは通りました。
広げていくためのたたき台程度ということで。
それではまた次回。