psycopg2是Python編程語言的PostgreSQL數據庫的適配器。postgreSQL屬于關系型數據庫,支持Python通過DB-API,本文假設已經安裝和配置好了PostgreSQL,要使用psycopg2的模塊,首先必須創建一個Connection對象,它表示數據庫然后再可以選擇創建游標對象,這將幫助執行的所有SQL語句。
本例中用的操作系統為:
Debian GNU/Linux 8.2 (jessie)12
Python版本為:
Python 2.7.912
psycopg2的安裝
Debian下執行以下命令安裝 psycopg2:
apt-get install python-psycopg21
安裝好后,就可以寫Python腳本來訪問PostgreSQL了。
導入psycopg2
想要使用psycopg2,必須用import語句導入該包:
import psycopg21
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()1
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")12
創建表
cur.execute( 'CREATE TABLE Employee ('
'name varchar(80),'
'address varchar(80),'
'age int,'
'date date'
')'
)12345678
插入數據
cur.execute("INSERT INTO Employee "
"VALUES('Gopher', 'China Beijing', 100, '2017-05-27')")12
查詢數據
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]))12345
更新數據
cur.execute("UPDATE Employee SET age=12 WHERE name='Gopher'")1
刪除數據
cur.execute("DELETE FROM Employee WHERE name='Gopher'")1
完整示例
#coding=utf-8import 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()
Python psycopg2 模塊APIs
以下是psycopg2的重要的的模塊例程可以滿足Python程序與PostgreSQL數據庫的工作。如果尋找一個更復雜的應用程序,那么可以看看Python psycopg2的模塊的官方文檔。
S.N. | API & 描述 |
---|---|
1 | psycopg2.connect(database="testdb", user="postgres", password="cohondob", host="127.0.0.1", port="5432") 這個API打開一個連接到PostgreSQL數據庫。如果成功打開數據庫時,它返回一個連接對象。 |
2 | connection.cursor() 該程序創建一個光標將用于整個數據庫使用Python編程。 |
3 | cursor.execute(sql [, optional parameters]) 此例程執行SQL語句??杀粎祷腟QL語句(即占位符,而不是SQL文字)。 psycopg2的模塊支持占位符用%s標志 例如:cursor.execute("insert into people values (%s, %s)", (who, age)) |
4 | curosr.executemany(sql, seq_of_parameters) 該程序執行SQL命令對所有參數序列或序列中的sql映射。 |
5 | curosr.callproc(procname[, parameters]) 這個程序執行的存儲數據庫程序給定的名稱。該程序預計為每一個參數,參數的順序必須包含一個條目。 |
6 | cursor.rowcount 這個只讀屬性,它返回數據庫中的行的總數已修改,插入或刪除最后 execute*(). |
7 | connection.commit() 此方法提交當前事務。如果不調用這個方法,無論做了什么修改,自從上次調用commit()是不可見的,從其他的數據庫連接。 |
8 | connection.rollback() 此方法會回滾任何更改數據庫自上次調用commit()方法。 |
9 | connection.close() 此方法關閉數據庫連接。請注意,這并不自動調用commit()。如果你只是關閉數據庫連接而不調用commit()方法首先,那么所有更改將會丟失! |
10 | cursor.fetchone() 這種方法提取的查詢結果集的下一行,返回一個序列,或者無當沒有更多的數據是可用的。 |
11 | cursor.fetchmany([size=cursor.arraysize]) 這個例程中取出下一個組的查詢結果的行數,返回一個列表。當沒有找到記錄,返回空列表。該方法試圖獲取盡可能多的行所顯示的大小參數。 |
12 | cursor.fetchall() 這個例程獲取所有查詢結果(剩余)行,返回一個列表??招袝r則返回空列表。 |
連接到數據庫
Python代碼顯示了如何連接到一個現有的數據庫。如果數據庫不存在,那么它就會被創建,最終將返回一個數據庫對象。
#!/usr/bin/pythonimport 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