6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pg8000の導入とSelect文の発行

Posted at

概要

PythonからPostgreSQLを参照する。

環境

  • Python 3.6.6
  • PostgreSQL 10
  • pg8000 1.12.2
  • atom-runner 2.7.1

詳細

インストール

  • Python, PostgreSQLのインストールは割愛
  • pg8000はpipでインストール
pip install pg8000

condaからは新しいバージョンのパッケージをインストールできなかった……。

テーブル

デモコードで使用するテーブルを作成しておく

id (int) name (varchar) yomigana(varchar) birth_place(char)
1 洲崎 綾 すざき あや 石川県
2 西 明日香 にし あすか 兵庫県

デモコード

インポート

import pg8000

コネクション生成

接続情報を渡してコネクションオブジェクトを生成する。
渡す情報の種類とキーワードは以下の通り。

pg8000.connect(user, host='localhost', unix_sock=None, port=5432, database=None, password=None, ssl=False, timeout=None, application_name=None)

デモではlocalhost:5432のDBにアクセスするので以下のように設定。

conn = pg8000.connect(user='postgres', password='***', database='kurukuruz1')

カーソル生成

コネクションオブジェクトからカーソルオブジェクトを生成する。

cur = conn.cursor()

コネクションオブジェクトはDBとの物理接続を表し、トランザクション管理を行う。
カーソルオブジェクトはフェッチ操作のコンテキストを管理する。

全レコード取得

カーソルオブジェクトを介してselect文の発行し、結果を受け取る。

cur.execute('SELECT * from actors')
results = cur.fetchall()

for row in results:
    id, name, yomigana, birth_place = row
    print(id)
    print(name)
    print(yomigana)
    print(birth_place)

↓実行結果

1
洲崎 綾
すざき あや
石川県
2
西 明日香
にし あすか
兵庫県

クエリへのバインディング

いくつかのバインド記法が用意されており、pg8000.paramstyleで設定されている。
今回はJavaのPreparedStatement風に?にバインドするために、以下のように設定を変更する。

pg8000.paramstyle = 'qmark'

バインドするパラメータはexecute時にクエリとともに渡す。

cur.execute('SELECT * from actors where name = ?', ('洲崎 綾',))
results = cur.fetchall()

for row in results:
    id, name, yomigana, birth_place = row
    print(id)
    print(name)
    print(yomigana)
    print(birth_place)

↓実行結果

1
洲崎 綾
すざき あや
石川県

参考サイト

おまけ

atom-runnerをそのまま使うと2バイト文字がエラーになるので文字コード設定を追加する。

参考

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?