blog

PostgreSQLからPythonへの接続

これはPythonのpsycopg2モジュールと統合できます。 sycopg2はデータベース用のPythonプログラミング言語のアダプタです。 そのプログラムコードは小さく、高速で安定しています。Py...

Jan 18, 2021 · 8 min. read
シェア

取付

PostgreSQLはPythonのpsycopg2モジュールと統合することができます。 sycopg2はPythonプログラミング言語用のPostgreSQLデータベースアダプタです。 そのプログラムコードは小さく、高速で安定しています。このモジュールは Python 2.5.x にデフォルトで同梱されていますので、別途インストールする必要はありません。お使いのマシンにインストールされていない場合は、以下のように yum コマンドを使用してインストールすることができます:

$yum install python-psycopg2 

psycopg2 モジュールを使用するには、まずデータベースを表す Connection オブジェクトを作成し、オプションですべての SQL 文の実行に役立つ Cursor オブジェクトを作成する必要があります。

Python psycopg2 モジュール API

以下の psycopg2 モジュールのルーチンは、PostgreSQL データベースで動作する Python アプリケーションのニーズを満たすために重要です。より複雑なアプリケーションを探している場合は、Python psycopg2 モジュールの公式ドキュメントを参照してください。

データベースへの接続

Python のコードは既存のデータベースに接続する方法を示しています。データベースが存在しない場合、データベースが作成され、最終的にデータベースオブジェクトが返されます。

#!/usr/bin/python 
 
import psycopg2 
 
conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host=".1", port="5432") 
 
print "Opened database successfully" 

ここで、データベース名testdbを指定し、データベースが正常にオープンされると、次のようなメッセージが表示されます:

Open database successfully 

テーブルの作成

次の Python プログラムは、以前に作成したデータベースを使用してテーブルを作成します:

#!/usr/bin/python 
 
import psycopg2 
 
conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host=".1", port="5432") 
print "Opened database successfully" 
 
cur = conn.cursor() 
cur.execute('''CREATE TABLE COMPANY 
       (ID INT PRIMARY KEY     NOT NULL, 
       NAME           TEXT    NOT NULL, 
       AGE            INT     NOT NULL, 
       ADDRESS        CHAR(50), 
       SALARY         REAL);''') 
print "Table created successfully" 
 
conn.commit() 
conn.close() 

上記のプログラムが実行されると、データベースtest.dbにテーブルCOMPANYが作成され、以下のメッセージが表示されます:

Opened database successfully 
Table created successfully 

#p#

INSERT操作

Pythonプログラムは、上記の例でCOMPANYがテーブルのレコードを作成する方法を示しています:

#!/usr/bin/python 
 
import psycopg2 
 
conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host=".1", port="5432") 
print "Opened database successfully" 
 
cur = conn.cursor() 
 
cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ 
      VALUES (1, 'Paul', 32, 'California', 20000.00 )"); 
 
cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ 
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 )"); 
 
cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ 
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )"); 
 
cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ 
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )"); 
 
conn.commit() 
print "Records created successfully"; 
conn.close() 

上記のプログラムが実行されると、COMPANYテーブルにレコードが作成され、以下の2行が表示されます:

Opened database successfully 
Records created successfully 

セレクト操作

上の例の COMPANY テーブルで作成されたレコードを取得して表示する方法を示す Python プログラム:

#!/usr/bin/python 
 
import psycopg2 
 
conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host=".1", port="5432") 
print "Opened database successfully" 
 
cur = conn.cursor() 
 
cur.execute("SELECT id, name, address, salary  from COMPANY") 
rows = cur.fetchall() 
for row in rows: 
   print "ID = ", row[0] 
   print "NAME = ", row[1] 
   print "ADDRESS = ", row[2] 
   print "SALARY = ", row[3], "
" 
 
print "Operation done successfully"; 
conn.close() 

上記の手順を実行すると、次のような結果が得られます:

Opened database successfully 
ID =  1 
NAME =  Paul 
ADDRESS =  California 
SALARY =  20000.0 
 
ID =  2 
NAME =  Allen 
ADDRESS =  Texas 
SALARY =  15000.0 
 
ID =  3 
NAME =  Teddy 
ADDRESS =  Norway 
SALARY =  20000.0 
 
ID =  4 
NAME =  Mark 
ADDRESS =  Rich-Mond 
SALARY =  65000.0 
 
Operation done successfully 

UPDATE操作

Pythonのコードでは、UPDATE文を使ってレコードを更新し、COMPANYテーブルから更新されたレコードを取得して表示する方法を示しています:

#!/usr/bin/python 
 
import psycopg2 
 
conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host=".1", port="5432") 
print "Opened database successfully" 
 
cur = conn.cursor() 
 
cur.execute("UPDATE COMPANY set SALARY = 25000.00 where ID=1") 
conn.commit 
print "Total number of rows updated :", cur.rowcount 
 
cur.execute("SELECT id, name, address, salary  from COMPANY") 
rows = cur.fetchall() 
for row in rows: 
   print "ID = ", row[0] 
   print "NAME = ", row[1] 
   print "ADDRESS = ", row[2] 
   print "SALARY = ", row[3], "
" 
 
print "Operation done successfully"; 
conn.close() 

上記の手順を実行すると、次のような結果が得られます:

Opened database successfully 
Total number of rows updated : 1 
ID =  1 
NAME =  Paul 
ADDRESS =  California 
SALARY =  25000.0 
 
ID =  2 
NAME =  Allen 
ADDRESS =  Texas 
SALARY =  15000.0 
 
ID =  3 
NAME =  Teddy 
ADDRESS =  Norway 
SALARY =  20000.0 
 
ID =  4 
NAME =  Mark 
ADDRESS =  Rich-Mond 
SALARY =  65000.0 
 

Operation done successfully 

#p#

DELETE操作

Pythonのコードでは、DELETE文を使ってレコードを削除し、COMPANYテーブルの残りのレコードを取得して表示する方法を示しています:

#!/usr/bin/python 
 
import psycopg2 
 
conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host=".1", port="5432") 
print "Opened database successfully" 
 
cur = conn.cursor() 
 
cur.execute("DELETE from COMPANY where ID=2;") 
conn.commit 
print "Total number of rows deleted :", cur.rowcount 
 
cur.execute("SELECT id, name, address, salary  from COMPANY") 
rows = cur.fetchall() 
for row in rows: 
   print "ID = ", row[0] 
   print "NAME = ", row[1] 
   print "ADDRESS = ", row[2] 
   print "SALARY = ", row[3], "
" 
 
print "Operation done successfully"; 
conn.close() 

上記の手順を実行すると、次のような結果が得られます:

Opened database successfully 
Total number of rows deleted : 1 
ID =  1 
NAME =  Paul 
ADDRESS =  California 
SALARY =  20000.0 
 
ID =  3 
NAME =  Teddy 
ADDRESS =  Norway 
SALARY =  20000.0 
 
ID =  4 
NAME =  Mark 
ADDRESS =  Rich-Mond 
SALARY =  65000.0 
 
Operation done successfully 

Read next

ウェブマーカープラグイン

私の友人の会社では、静的なウェブページをすべてアプリにパッケージ化し、WebViewでこれらのウェブページにアクセスする際に、ウェブページのテキストをマークし、コメントやメモ、百科事典などの他の操作を行い、関連する情報をサーバに保存し、次に開いたときにタグ付けされた情報の内容を表示できるようにしたいという依頼を受けました。 次の画像は、もちろん、私が合理化した後です...

Jan 17, 2021 · 7 min read