【 コピペでOK】9割の機能を網羅!PythonからPostgreSQLを扱うクラスを作ってみました。

当ページのリンクには広告が含まれています。


こちらの記事では、Python から PostgreSQLに接続するための方法について解説しました。

今回は、以前 SQLite 向けに作成した、データの抽出や更新が簡単に出来る Python用のクラスを PostgreSQL 向けに修正しましたので、ソースコードの公開と解説をしたいと思います。

コピー&ペーストで簡単に使えますので、あとは皆さんの用途に合わせて追加、修正の上、利用して頂ければと思います。

単に

今回は、以前 SQLite 向けに作成した、データの抽出や更新が簡単に出来る Python用のクラスを PostgreSQL 向けに修正しましたので、ソースコードの公開と解説をしたいと思います。

への接続や切断だけではなく、テーブルの存在チェック、テーブル作成、トランザクション付きの複数SQLの実行、テーブル一覧やカラム一覧の取得機能も盛り込んでいますので、参考にして頂ければと思います。

目次

クラスの使い方

今回は PostgreConnectというクラス名にしています。

使う際には、下記の通り psycopg2のパッケージをインポートしておいて下さい。

また、別途 psycopg2 のインストールが必要な場合がありますので、必要に応じてこちらの記事をご一読ください。



リファレンス(メソッドの名前と仕様)

今回のクラスに実装されているメソッドの一覧と仕様は以下の通りです。

機能メソッド名と引数戻り値補足
コンストラクタ PostgreConnect (
host,
dbname,
scheme,
user,
password,
port=5432
インスタンス接続先ホスト名、データベース名、スキーマ名、ユーザー名、パスワード、ポートを指定する。
任意のSQLを実行execute(sql)なし任意のSQLを1つだけ実行
複数のSQLをまとめて実行execute_all(sqls)なしリストに格納された複数のSQLをトランザクション付きで実行。
エラーが発生するとロールバックされる。
問い合わせSQLの実行execute_query(sql)リストselect等の問い合わせSQLを実行し、全ての結果をリストで返す。
例: [ (aa , 123 , True) , (bb , 567 , False) ]

1つの値を返すSQLの実行execute_scalor(sql)単一の値1個の値を返す問い合わせSQLを実行し、結果を取得
テーブルの作成create(
tablename,
columns,
primarykey = '',
isdrop=False
)
なしテーブル名、カラム名、主キーを指定してテーブルを作成する。
既にテーブルがあればエラーとなるが、
isdrop=Trueにすることで、既にテーブルが存在していれば削除を実行する。
テーブルの削除drop(tablename)なしテーブルが存在していれば削除する。
テーブルの存在チェックexists(tablename)True/Falseテーブルが存在していれば True、存在しなければ Falseを返す。
テーブル名の変更rename
(
old_tablename,
new_tablename
)
なしold_tablename を new_table_nameに変更する
カラムの追加add_column
(
tablename,
columns
)
なしtablenameで指定したテーブルにcolumnsで指定した列を追加する。
columnsはカラム名をリスト形式で指定する。
カラム名の後に型を指定することも可能。
例:[ 'col1 varchar2(10)' , 'col2 datetime' ]
Create文の取得get_create_statment
(
tablename
)
strtablenameで指定したテーブルのCreate文を文字列で返す。
テーブル一覧の取得get_table_list
(
table_type=’’
)
リストデータベースに登録されているテーブル及びビューの名前をリストで返す。
例:[ 'table1' , 'table2' , 'table3' ]
table_type に 'view' を指定するとビューのみ、'table'を指定するとテーブルのみの一覧が取得できる。
カラムの名前と型の一覧を取得get_column_type(
tablename
)
リストtablenameで指定したテーブルにおいて、カラム名と型をタプルに格納し、リストで返す。
例:[ ('col1' , 'text') , ('col2' , 'real') ]
カラムの名前の一覧を取得get_column_list(
tablename
)
リストtablenameで指定したテーブルにおいて、カラム名をリストで返す。
例:[ 'col1' , 'col2' , 'col3' ]



簡単な使い方のサンプル

test といテーブルを作成し、データの追加、検索、カラム追加など、一通りの処理を実行するサンプルです。

'host name' , 'db name' , 'scheme' , 'user name' , 'password' は、ご自身の環境に合わせて修正をお願いします。



クラスのソースコード

以下が今回のクラスのソースコードです。

そのままコピー&ペーストで張り付けて利用できます。

あとは、自由に変更してお使いください。

一応、Pythonで推奨される命名規則とコメントの書き方を使っています。



補足説明

この章では、本クラスについての改良ポイント、課題について解説します。

もし再利用されるのであれば、この点についてご留意ください。

データベース固有のSQL定義

テーブルやカラムの一覧を取得するSQL はデータベースごとに異なる可能性があるため、クラスの先頭に定数(実際にはクラス変数)として定義しています。

定数名内容
GET_TABLE_LIST_QUERYテーブルとViewの一覧を取得するためのSQLを記述
GET_COLUMN_LIST_QUERYカラムの一覧を取得するためのSQLを記述
GET_ALTER_TABLE_QUERYカラムの追加を行うためのSQLを記述
GET_RENAME_TABLE_QUERYテーブル名の変更を行うためのSQLを記述



テーブル一覧を取得するSQL

PostgreSQL の場合、テーブルは PG_TABLES 、ビューは PG_VIEWS というテーブルで管理されています。



カラム一覧を取得するSQL

PostgreSQL の場合、 カラム一覧は INFORMATION_SCHEMA.COLUMNS で管理されています。



カラムを追加するSQL

PostgreSQL の場合、 カラム名は ALTER TABLE テーブル名 ADD カラム名 データ型 で追加可能です。



テーブル名を変更するSQL

PostgreSQL の場合、ALTER TABLE 旧テーブル名 TO 新テーブル名 で変更します。





まとめ

今回は Python で SQLite を扱うヘルパークラスを、 PostgreSQL 用に移植してみました。

テーブル一覧の取得やカラム一覧の取得、create文の取得など、たまに使いたくなる機能も実装しています。

このクラスがあれば、おおよその事が出来ると思いますので、後は皆さんの利用方法に合わせて拡張して下さい。

この記事が皆さんのお役に立てれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次