このブログを検索

2020/02/15

python3のcgiでpostgresqlのデータを参照する @CentOS8

pythonからpostgresqlを使うためのライブラリとして psycopg2というものがよく使われているようである。 

エラーが出ては足りないものをインストールした結果、 以下が必要であった。
dnf install postgresql-devel
dnf install gcc
dnf install python3-devel
pip install psycopg2

pythonでcgiが動くことはすでに確認済み。 
OSはCentOS8、pythonは3.6.8である。 

以下がpostgresqlのDBに登録されている内容を表示するcgiの例である。 

ローカル(cgiを実行しているサーバ)にある、 
monqy というデータベースの、 usersというテーブルに登録されているレコードの、 nameという項目の内容を、すべて表示する。
   
#!/usr/bin/python

import cgi
import psycopg2
import psycopg2.extras
import os

path = "localhost"
port = "5432"
dbname = "monqy"
user = "postgres"
password = "hogehoge"

pg_params = "host={} port={} dbname={} user={} password={}"
pg_params = pg_params.format(path,port,dbname,user,password)

sql = """select * from users"""

print('Content-Type: text/html; charset=utf-8')
print('')
print('')

connection = psycopg2.connect(pg_params)
cur = connection.cursor(cursor_factory=psycopg2.extras.DictCursor)
cur.execute(sql)

results = cur.fetchall()
for row in results:
        print(row['name'])
        print("
") cur.close connection.close print("")
この例ではDBの内容を辞書形式で取得することによって、項目名で値を取り出している。 

せっかくDBを使っているのに名前を使わないなんてわざわざライブラリを使う意味がないだろうから辞書形式で取得するのは必須だろう。