西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)其它知識(shí) → Python通過(guò)psycopg2操作PostgreSQL

Python通過(guò)psycopg2操作PostgreSQL

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:Cynhard85時(shí)間:2017/10/29 10:25:13字體大。A-A+

作者:Cynhard85點(diǎn)擊:1次評(píng)論:0次標(biāo)簽: psycopg2 python PostgreSQL

psycopg22.7.3.2 官方最新版
  • 類型:運(yùn)動(dòng)健身大小:3.5M語(yǔ)言:中文 評(píng)分:5.0
  • 標(biāo)簽:
立即下載

psycopg2是Python編程語(yǔ)言的PostgreSQL數(shù)據(jù)庫(kù)的適配器。postgreSQL屬于關(guān)系型數(shù)據(jù)庫(kù),支持Python通過(guò)DB-API,本文假設(shè)已經(jīng)安裝和配置好了PostgreSQL,要使用psycopg2的模塊,首先必須創(chuàng)建一個(gè)Connection對(duì)象,它表示數(shù)據(jù)庫(kù)然后再可以選擇創(chuàng)建游標(biāo)對(duì)象,這將幫助執(zhí)行的所有SQL語(yǔ)句。

本例中用的操作系統(tǒng)為:

Debian GNU/Linux 8.2 (jessie)12

Python版本為:

Python 2.7.912

psycopg2的安裝

Debian下執(zhí)行以下命令安裝 psycopg2:

apt-get install python-psycopg21

安裝好后,就可以寫Python腳本來(lái)訪問(wèn)PostgreSQL了。

導(dǎo)入psycopg2

想要使用psycopg2,必須用import語(yǔ)句導(dǎo)入該包:

import psycopg21

connection類

connection類表示數(shù)據(jù)庫(kù)連接對(duì)象。由psycopg2.connect()方法創(chuàng)建。

創(chuàng)建connection對(duì)象

psycopg2.connect()函數(shù)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)會(huì)話(Session)并且返回一個(gè)連接對(duì)象。該函數(shù)的參數(shù)為:

dbname – 數(shù)據(jù)庫(kù)名字

user – 數(shù)據(jù)庫(kù)角色名稱

password – 數(shù)據(jù)庫(kù)角色密碼

host – 數(shù)據(jù)庫(kù)地址

port – 端口

connection的主要方法

connection提供了常用的數(shù)據(jù)庫(kù)操作:

commit():提交任何未提交的事務(wù)(transaction)到數(shù)據(jù)庫(kù)。

rollback():回滾。

close():關(guān)閉數(shù)據(jù)庫(kù)。如果關(guān)閉數(shù)據(jù)庫(kù)時(shí)仍有未提交的事務(wù),則執(zhí)行回滾操作。

cursor類

創(chuàng)建cursor對(duì)象

psycopg2提供了一個(gè)cursor類,用來(lái)在數(shù)據(jù)庫(kù)Session里執(zhí)行PostgreSQL命令。cursor對(duì)象由connection.cursor()方法創(chuàng)建:

cur = conn.cursor()1

cursor的主要方法

execute(query, vars=None):執(zhí)行SQL語(yǔ)句。

fetchall():獲取所有查詢結(jié)果,返回值為tuple列表。

有了cursor對(duì)象,就可以操作數(shù)據(jù)庫(kù)了。

建立數(shù)據(jù)庫(kù)連接

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

創(chuàng)建表

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

插入數(shù)據(jù)

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

查詢數(shù)據(jù)

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

更新數(shù)據(jù)

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

刪除數(shù)據(jù)

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

完整示例

#coding=utf-8import psycopg2# 連接數(shù)據(jù)庫(kù)conn = psycopg2.connect(dbname="mydb", user="postgres",
       password="1234", host="127.0.0.1", port="5432")# 創(chuàng)建cursor以訪問(wèn)數(shù)據(jù)庫(kù)cur = conn.cursor()# 創(chuàng)建表cur.execute(        'CREATE TABLE Employee ('
       'name    varchar(80),'
       'address varchar(80),'
       'age     int,'
       'date    date'
       ')'
   )# 插入數(shù)據(jù)cur.execute("INSERT INTO Employee "
       "VALUES('Gopher', 'China Beijing', 100, '2017-05-27')")# 查詢數(shù)據(jù)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]))# 更新數(shù)據(jù)cur.execute("UPDATE Employee SET age=12 WHERE name='Gopher'")# 刪除數(shù)據(jù)cur.execute("DELETE FROM Employee WHERE name='Gopher'")# 提交事務(wù)conn.commit()# 關(guān)閉連接conn.close()

Python psycopg2 模塊APIs

以下是psycopg2的重要的的模塊例程可以滿足Python程序與PostgreSQL數(shù)據(jù)庫(kù)的工作。如果尋找一個(gè)更復(fù)雜的應(yīng)用程序,那么可以看看Python psycopg2的模塊的官方文檔。

S.N.
API & 描述
1
psycopg2.connect(database="testdb", user="postgres", password="cohondob", host="127.0.0.1", port="5432") 

這個(gè)API打開(kāi)一個(gè)連接到PostgreSQL數(shù)據(jù)庫(kù)。如果成功打開(kāi)數(shù)據(jù)庫(kù)時(shí),它返回一個(gè)連接對(duì)象。
2
connection.cursor()

該程序創(chuàng)建一個(gè)光標(biāo)將用于整個(gè)數(shù)據(jù)庫(kù)使用Python編程。
3
cursor.execute(sql [, optional parameters])

此例程執(zhí)行SQL語(yǔ)句?杀粎(shù)化的SQL語(yǔ)句(即占位符,而不是SQL文字)。 psycopg2的模塊支持占位符用%s標(biāo)志
例如:cursor.execute("insert into people values (%s, %s)", (who, age))


4
curosr.executemany(sql, seq_of_parameters)

該程序執(zhí)行SQL命令對(duì)所有參數(shù)序列或序列中的sql映射。
5
curosr.callproc(procname[, parameters])

這個(gè)程序執(zhí)行的存儲(chǔ)數(shù)據(jù)庫(kù)程序給定的名稱。該程序預(yù)計(jì)為每一個(gè)參數(shù),參數(shù)的順序必須包含一個(gè)條目。


6
cursor.rowcount

這個(gè)只讀屬性,它返回?cái)?shù)據(jù)庫(kù)中的行的總數(shù)已修改,插入或刪除最后 execute*().


7
connection.commit()

此方法提交當(dāng)前事務(wù)。如果不調(diào)用這個(gè)方法,無(wú)論做了什么修改,自從上次調(diào)用commit()是不可見(jiàn)的,從其他的數(shù)據(jù)庫(kù)連接。


8
connection.rollback()

此方法會(huì)回滾任何更改數(shù)據(jù)庫(kù)自上次調(diào)用commit()方法。


9
connection.close()

此方法關(guān)閉數(shù)據(jù)庫(kù)連接。請(qǐng)注意,這并不自動(dòng)調(diào)用commit()。如果你只是關(guān)閉數(shù)據(jù)庫(kù)連接而不調(diào)用commit()方法首先,那么所有更改將會(huì)丟失!
10
cursor.fetchone()

這種方法提取的查詢結(jié)果集的下一行,返回一個(gè)序列,或者無(wú)當(dāng)沒(méi)有更多的數(shù)據(jù)是可用的。


11
cursor.fetchmany([size=cursor.arraysize])

這個(gè)例程中取出下一個(gè)組的查詢結(jié)果的行數(shù),返回一個(gè)列表。當(dāng)沒(méi)有找到記錄,返回空列表。該方法試圖獲取盡可能多的行所顯示的大小參數(shù)。


12
cursor.fetchall()

這個(gè)例程獲取所有查詢結(jié)果(剩余)行,返回一個(gè)列表?招袝r(shí)則返回空列表。

連接到數(shù)據(jù)庫(kù)

Python代碼顯示了如何連接到一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)。如果數(shù)據(jù)庫(kù)不存在,那么它就會(huì)被創(chuàng)建,最終將返回一個(gè)數(shù)據(jù)庫(kù)對(duì)象。

 

#!/usr/bin/pythonimport psycopg2 conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")print "Opened database successfully"

 

在這里,也可以提供數(shù)據(jù)庫(kù)testdb的名稱,如果數(shù)據(jù)庫(kù)成功打開(kāi),那么它會(huì)給下面的消息:

Open database successfully

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)