python アプリ開発

[超初心者向け]PostgreSQLをpythonで操作できるようになるまで

こんにちは、こちょすです!

今回はpythonを使ってPostgreSQLを操作できるようになるまでの手順をご説明していこうと思います!

タイトルにもあるとおり、超初心者向けの手順になっているので、基礎的な内容しか触れませんがご容赦ください!

 

インスタはこちら!日々のトレーニング動画や食事の記録を載せています!ぜひフォロー・応援お願いします!

instagram:@kochos05
Twitter:@kochos5

 

 

こんな方におすすめ

  • PostgreSQLの導入方法が知りたい
  • まずはPostgreSQLを触ってみたい
  • pythonでPostgreSQLを使えるようになりたい

 

 

PostgreSQLのデータベースを作成する

最終的なゴールはPostgreSQLをPythonで操作することですが、まずはPostgreSQLのデータベースを構築して、直接ターミナルから操作できるようになりましょう!

 

pythonの仮想環境を作成する

まずは今回用の仮想環境を作ります。これは必須では無いので、読み飛ばしてもOKです。

$ python -m venv test_postgresql
$ source test_postgresql/bin/activate

注意ポイント


$はターミナルを表しているだけなので、それ以外の文字列を打ち込んでくださいね!

 

postgreSQLのインストール

まずはhomebrewを使って、postgreSQLをインストールします。
ターミナルから以下のコマンドを実行します。

 

$ brew install postgresql

 

データベースの作成

データベースの作成は以下のコマンドで実行します。
「mydb」の部分はお好きな名前にしてください。

$ createdb mydb

 

注意ポイント


上記コマンドを実行して以下のようなエラーが出た場合、「brew services restart postgresql」というコマンドを実施してみてください!

 

createdb: error: could not connect to database template1: could not connect to server: No such file or directory
・・・

 

PostgreSQLのデータベースにアクセスする

PostgreSQLのデータベースにアクセスする

では上記で作成したmydbにアクセスしてみます。

$ psql mydb

 

以下のようにターミナルが表示されれば成功です。

psql (13.4)
Type "help" for help.

mydb=#

 

いくつかselect文を発行してみましょう!


mydb=# select version()
mydb-# ;
                                                     version                                                      
------------------------------------------------------------------------------------------------------------------
 PostgreSQL 13.4 on x86_64-apple-darwin20.4.0, compiled by Apple clang version 12.0.5 (clang-1205.0.22.9), 64-bit
(1 row)

mydb=# select current_date;
 current_date 
--------------
 2021-09-05
(1 row)

mydb=# select 2 + 2
mydb=# ;
 ?column? 
----------
        4
(1 row)

 

PostgreSQLのデータベースへの接続を終了する

psqlを終了するには、 以下を入力します。(スラッシュではなくバックスラッシュなので注意です!)

mydb=# \q

 

新しいテーブルの作成

今回はサンプルとして天気を管理するテーブルと、都市を管理するテーブルを作ってみます。
テーブルの作成はcreate文を使います。

create文の発行

以下のコマンドを、postreSQLに接続して実行しましょう。
実行後に「CREATE TABLE」と出力されれば成功です。

CREATE TABLE weather (
city varchar(80),
temp_lo int, -- 最低気温
temp_hi int, -- 最高気温
prcp real, -- 降水量
date date
);

CREATE TABLE cities (
name varchar(80),
location point
);

 

テーブルに行を挿入

上記で作成した天気テーブルと都市テーブルに対してレコードを登録します。
レコードの登録はinsert文を使います。

insert文の発行

以下のコマンドを、postreSQLに接続して実行しましょう。

INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');

 

以下のようにカラムを指定して登録することも可能です(こちらのほうが明示的で良いと思います)


INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
 VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');
INSERT INTO weather (date, city, temp_hi, temp_lo)
 VALUES ('1994-11-29', 'Hayward', 54, 37);

ちなみに、PostgreSQLのデフォルトでは自動コミットとなっているので、commitは明示的に実行しなくても、commitされます。(もしそれが困る場合には、AUTOCOMMITをオフにする方法とかで調べると出てくると思いますのでぜひやってみてください!)

 

pythonからpostgreSQLに接続する

次は先程作成したデータベースにpythonから接続してみましょう。

ドライバのインストールをする

pythonからpostgreSQLを操作するためにはドライバーのインストールが必要なので、pipでインストールしましょう

$ pip install psycopg2

接続用のpythonファイルを作成

test.pyとして、以下のようなコードを書きましょう。
ちなみにconnectの引数として、「 " user=" + "ユーザー"」 と「" password=" + "パスワード"」も設定可能です。
指定しない場合にはデフォルトユーザの「postgres」として接続します。

import psycopg2

def connect():
    con = psycopg2.connect("host=" + "localhost" +
                           " port=" + "5432" +
                           " dbname=" + "mydb" )

    return con

def select_execute(con, sql):
    with con.cursor() as cur:
        cur.execute(sql)
        rows = cur.fetchall()

    return rows

if __name__ == '__main__':
    con = connect()

    sql = 'select * from weather'

    res = select_execute(con, sql)
    for r in res:
        for index, i in enumerate(r):
            print(r[index])

これを実行すると、以下のように出力されればうまく接続できています!

San Francisco
46
50
0.25
1994-11-27
San Francisco
43
57
0.0
1994-11-29
Hayward
37
54
None
1994-11-29

以上でpythonを使って、PostgreSQLを操作する方法でした!
この記事でぜひデータベース操作の基礎を学んでいただければ幸いです。

さらに勉強したい方は、SQLAlchemyと言われるORMツールを使って操作する方法などを学ぶと良いかなと思います!

ではまた!!

-python, アプリ開発

© 2021 これブロ