Python通過psycopg2操作PostgreSQL
阿新 • • 發佈:2019-01-31
說明
本文假設已經安裝和配置好了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()