1. 程式人生 > >Python通過psycopg2操作PostgreSQL

Python通過psycopg2操作PostgreSQL

說明

本文假設已經安裝和配置好了PostgreSQL,如果還沒有安裝和配置PostgreSQL,請移步至我的另一篇博文:Debian8下安裝配置PostgreSQL

本例中用的作業系統為:

Debian GNU/Linux 8.2 (jessie)

Python版本為:

Python 2.7.9

psycopg2的安裝

Debian下執行以下命令安裝 psycopg2:

apt-get install python-psycopg2

安裝好後,就可以寫Python指令碼來訪問PostgreSQL了。

匯入psycopg2

想要使用psycopg2,必須用import語句匯入該包:

import psycopg2

connection類

connection類表示資料庫連線物件。由psycopg2.connect()方法建立。

建立connection物件

psycopg2.connect()函式建立一個新的資料庫會話(Session)並且返回一個連線物件。該函式的引數為:

  • dbname – 資料庫名字
  • user – 資料庫角色名稱
  • password – 資料庫角色密碼
  • host – 資料庫地址
  • port – 埠

connection的主要方法

connection提供了常用的資料庫操作:

  • commit():提交任何未提交的事務(transaction)到資料庫。
  • rollback():回滾。
  • close():關閉資料庫。如果關閉資料庫時仍有未提交的事務,則執行回滾操作。

cursor類

建立cursor物件

psycopg2提供了一個cursor類,用來在資料庫Session裡執行PostgreSQL命令。cursor物件由connection.cursor()方法建立:

cur = conn.cursor()

cursor的主要方法

  • execute(query, vars=None):執行SQL語句。
  • fetchall():獲取所有查詢結果,返回值為tuple列表。

有了cursor物件,就可以操作資料庫了。

建立資料庫連線

conn = psycopg2.connect(dbname="mydb", user="postgres",
        password="1234", host="127.0.0.1", port="5432")

建立表

cur.execute(
        'CREATE TABLE Employee ('
        'name    varchar(80),'
        'address varchar(80),'
        'age     int,'
        'date    date'
        ')'
    )

插入資料

cur.execute("INSERT INTO Employee "
        "VALUES('Gopher', 'China Beijing', 100, '2017-05-27')")

查詢資料

cur.execute("SELECT * FROM Employee")
rows = cur.fetchall()
for row in rows:
    print('name=' + str(row[0]) + ' address=' + str(row[1]) + 
        ' age=' + str(row[2]) + ' date=' + str(row[3]))

更新資料

cur.execute("UPDATE Employee SET age=12 WHERE name='Gopher'")

刪除資料

cur.execute("DELETE FROM Employee WHERE name='Gopher'")

完整示例

#coding=utf-8

import psycopg2

# 連線資料庫
conn = psycopg2.connect(dbname="mydb", user="postgres",
        password="1234", host="127.0.0.1", port="5432")

# 建立cursor以訪問資料庫
cur = conn.cursor()

# 建立表
cur.execute(
        'CREATE TABLE Employee ('
        'name    varchar(80),'
        'address varchar(80),'
        'age     int,'
        'date    date'
        ')'
    )

# 插入資料
cur.execute("INSERT INTO Employee "
        "VALUES('Gopher', 'China Beijing', 100, '2017-05-27')")

# 查詢資料
cur.execute("SELECT * FROM Employee")
rows = cur.fetchall()
for row in rows:
    print('name=' + str(row[0]) + ' address=' + str(row[1]) + 
        ' age=' + str(row[2]) + ' date=' + str(row[3]))

# 更新資料
cur.execute("UPDATE Employee SET age=12 WHERE name='Gopher'")

# 刪除資料
cur.execute("DELETE FROM Employee WHERE name='Gopher'")

# 提交事務
conn.commit()

# 關閉連線
conn.close()