psycopg2,是Python語言的PostgreSQL資料庫接口,是對Psycopg 1.1.x版本進行的幾乎完全的改寫。
基本介紹
- 外文名:psycopg2
- 性質:PostgreSQL資料庫接口
- 系統:Python DB API 2.0
- 特點:COPY TO/COPY FROM語句
簡介,特性,示例,
簡介
它的主要優勢在於完全支持Python DB API 2.0,以及安全的多執行緒支持。它適用於隨時創建、銷毀大量游標的、和產生大量並發INSERT、UPDATE操作的多執行緒資料庫套用。Psycopg包內含 ZPsycopgDA,一個Zope資料庫接口。
特性
●對libpq v3協定的完全支持;
●COPY TO/COPY FROM語句;
●還支持Unicode查詢,和Python列表型與PostgreSQL數組類型的映射。
示例
1. 連結PostgreSQL並設定Cursor
import psycopg2
import psycopg2.extras
conn = psycopg2.connect(host=’localhost’, port=5432, user=’postgres’, password=’postgres’, database=’test’)
# connect()也可以使用一個大的字元串參數, 比如”host=localhost port=5432 user=postgres password=postgres dbname=test”
cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
#這裡創建的是一個字典Cursor, 這樣返回的數據, 都是字典的形式, 方便使用
2. 執行SQL腳本
cursor.execute(‘SELECT * FROM test WHERE id > %s;’, (5,))
這裡的使用有一些奇怪, 有幾個地方需要說明. 首先, sql腳本必須以;結尾, 不可以省略. 其次, 不管sql中有幾個參數, 都需要用%s代替, 只有%s, 不管值是字元還是數字, 一律%s. 最後, 第二個參數中, 一定要傳入元組, 哪怕只有一個元素, 像我剛才的例子一樣, (5)這樣是不行的.
3. 得到查詢結果
psycopg2提供了3種得到結果的方式, fetchone(), fetchall()和fetchmany(). fetchone()返回一條結果, 如果找不到, 返回None. fetchall()返回所有結果, 如果找不到, 返回空list. fetchmany接收1個參數, 即返回的結果數, 每次調用, 游標向後移, 找不到了, 就返回空list.
4. 查看生成的sql腳本
cursor.mogrify(‘SELECT * FROM test WHERE a = %s AND b = %s;’, (‘a’, ‘b’))
mogrify()函式會返回生成的sql腳本, 用以查看生成的sql是否正確.
5. 查看上一條執行的腳本
cursor.query
這是一個唯讀的屬性, 用以查看上次執行的sql腳本.
6. 插入數據
執行完INSERT, UPDATE, DELETE這樣的sql腳本後, 需要conn.commit()提交一下, 才會把數據提交到資料庫當中. 切記.
這裡有幾個小技巧, 大家肯定會用的上的.
1. 取得最後插入的記錄的ID
在INSERT的語句最後面加上RETURNING id即可, 比如:
cursor.execute(‘INSERT INTO test (a, b) VALUES (%s, %s) RETURNING id;’, (‘a’, ‘b’))
item = cursor.fetchone()
print item[0] #這裡就是剛才插入的記錄的ID