GIS奮闘記

現役GISエンジニアの技術紹介ブログ。主にPythonを使用。

スポンサーリンク

Python で PostgreSQL を操作してみよう!

さて、本日は Python を使った PostgreSQL の操作について紹介しようと思います。

関連記事

Python で SQL Server、SQLite を操作する方法についても書いていますので、興味のある方はぜひ読んでみてください。

www.gis-py.com

www.gis-py.com

使用するライブラリ

psycopg2 というライブラリを使用します。

実行環境

Windows10 64bit
Python 3.6.6
PostgreSQL 12.4

使用するデータ

以下のようなテーブルを用意しました。

f:id:sanvarie:20200901144003p:plain

データは以下のようなものを用意しました。

f:id:sanvarie:20200901144032p:plain

今回試すこと

psycopg2 を使用して以下を実行してみます

ログイン
検索
更新
挿入
削除

ログイン

接続文字列を作成して psycopg2.connect を実行すればログインができます。

# -*- coding: utf-8 -*-
import psycopg2

def connect():
    con = psycopg2.connect("host=" + "localhost" +
                           " port=" + "5432" +
                           " dbname=" + "DB名" +
                           " user=" + "ユーザー" +
                           " password=" + "パスワード")

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

検索

テーブルを検索してカラムの値を print します。

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 test'

    res = select_execute(con, sql)
    for r in res:
        print(r[0])
        print(r[1])

このような結果になりました。

f:id:sanvarie:20200901143407p:plain

更新

name カラムの中身を「A」から「B」となるようにデータを更新します。

def updatet_execute(con, slq):
    with con.cursor() as cur:
        cur.execute(sql)

    con.commit()

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

    sql =  """update test set name = 'B'"""

    # データ更新
    updatet_execute(con, sql)

想定通りの結果になりました。

f:id:sanvarie:20200901150408p:plain

挿入

1レコード挿入する処理を書いています。

def insert_execute(con, slq):
    with con.cursor() as cur:
        cur.execute(sql, (2,'Z'))

    con.commit()

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

    sql =  """insert
                into test(id,
                          name)
                      values(%s,
                             %s)"""

    # データ登録
    insert_execute(con, sql)

ちゃんと挿入した分のレコードが DB 側に反映されていました。

f:id:sanvarie:20200901145114p:plain

削除

上記処理で挿入したレコードを削除しています。

def delete_execute(con, slq):
    with con.cursor() as cur:
        cur.execute(sql)

    con.commit()

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

    sql =  """delete
                from test
               where id = 2"""

    # データ削除
    delete_execute(con, sql)

想定通りレコードが削除されました。

f:id:sanvarie:20200901145412p:plain

まとめ

psycopg2 を使った一通りの処理を紹介したのですが、簡単に Python で PostgreSQL を操作できることがわかるかと思います。システム開発にDB はつきものなので、今後も色々 DB の扱いについて書いてみようと思います。本日は以上です。