PostgreSQL-Pythonインターフェース
インストール
PostgreSQLは、psycopg2モジュールを使用してPythonと統合できます。sycopg2は、Pythonプログラミング言語用のPostgreSQLデータベースアダプタです。psycopg2は、非常に小さくて速く、岩のように安定することを目的として作成されました。このモジュールは、デフォルトでPythonバージョン2.5.x以降と一緒に出荷されるため、個別にインストールする必要はありません。
マシンにインストールされていない場合は、yumコマンドを使用して次のようにインストールできます-
$yum install python-psycopg2
psycopg2モジュールを使用するには、最初にデータベースを表すConnectionオブジェクトを作成する必要があります。次に、オプションで、すべてのSQLステートメントの実行に役立つカーソルオブジェクトを作成できます。
Pythonpsycopg2モジュールAPI
以下は重要なpsycopg2モジュールルーチンです。これは、PythonプログラムからPostgreSQLデータベースを操作するための要件で十分です。より洗練されたアプリケーションをお探しの場合は、Pythonpsycopg2モジュールの公式ドキュメントをご覧ください。
S.いいえ。 | APIと説明 |
---|---|
1 | psycopg2.connect(database="testdb", user="postgres", password="cohondob", host="127.0.0.1", port="5432") このAPIは、PostgreSQLデータベースへの接続を開きます。データベースが正常に開かれると、接続オブジェクトが返されます。 |
2 | connection.cursor() このルーチンは、 cursor これは、Pythonを使用したデータベースプログラミング全体で使用されます。 |
3 | cursor.execute(sql [, optional parameters]) このルーチンはSQLステートメントを実行します。SQLステートメントはパラメーター化できます(つまり、SQLリテラルの代わりにプレースホルダー)。psycopg2モジュールは、%s記号を使用したプレースホルダーをサポートします 例:cursor.execute( "insert into people values(%s、%s)"、(who、age)) |
4 | cursor.executemany(sql, seq_of_parameters) このルーチンは、シーケンスsqlで見つかったすべてのパラメーターシーケンスまたはマッピングに対してSQLコマンドを実行します。 |
5 | cursor.callproc(procname[, parameters]) このルーチンは、指定された名前でストアドデータベースプロシージャを実行します。パラメータのシーケンスには、プロシージャが予期する引数ごとに1つのエントリが含まれている必要があります。 |
6 | cursor.rowcount この読み取り専用属性は、最後の最後の実行*()によって変更、挿入、または削除されたデータベース行の総数を返します。 |
7 | connection.commit() このメソッドは、現在のトランザクションをコミットします。このメソッドを呼び出さない場合、commit()を最後に呼び出してから行ったことは、他のデータベース接続からは見えません。 |
8 | connection.rollback() このメソッドは、commit()の最後の呼び出し以降のデータベースへの変更をロールバックします。 |
9 | connection.close() このメソッドは、データベース接続を閉じます。これはcommit()を自動的に呼び出さないことに注意してください。最初にcommit()を呼び出さずにデータベース接続を閉じると、変更が失われます。 |
10 | cursor.fetchone() このメソッドは、クエリ結果セットの次の行をフェッチして単一のシーケンスを返すか、使用可能なデータがなくなるとNoneを返します。 |
11 | cursor.fetchmany([size=cursor.arraysize]) このルーチンは、クエリ結果の次の行セットをフェッチして、リストを返します。使用可能な行がなくなると、空のリストが返されます。このメソッドは、sizeパラメーターで指定された数の行をフェッチしようとします。 |
12 | cursor.fetchall() このルーチンは、クエリ結果のすべての(残りの)行をフェッチして、リストを返します。使用可能な行がない場合は、空のリストが返されます。 |
データベースへの接続
次のPythonコードは、既存のデータベースに接続する方法を示しています。データベースが存在しない場合は、データベースが作成され、最後にデータベースオブジェクトが返されます。
#!/usr/bin/python
import psycopg2
conn = psycopg2.connect(database="testdb", user = "postgres", password = "pass123", host = "127.0.0.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 = "127.0.0.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()
上記のプログラムを実行すると、COMPANYテーブルが作成されます。 test.db 次のメッセージが表示されます-
Opened database successfully
Table created successfully
INSERT操作
次のPythonプログラムは、上記の例で作成したCOMPANYテーブルにレコードを作成する方法を示しています。
#!/usr/bin/python
import psycopg2
conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.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
SELECT操作
次のPythonプログラムは、上記の例で作成したCOMPANYテーブルからレコードをフェッチして表示する方法を示しています。
#!/usr/bin/python
import psycopg2
conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.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], "\n"
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 = "127.0.0.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], "\n"
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
DELETE操作
次のPythonコードは、DELETEステートメントを使用してレコードを削除し、COMPANYテーブルから残りのレコードをフェッチして表示する方法を示しています。
#!/usr/bin/python
import psycopg2
conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.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], "\n"
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