1. 程式人生 > 其它 >爬蟲與Python:(四)爬蟲進階二之資料儲存(資料庫儲存)——8.PostgreSQL儲存

爬蟲與Python:(四)爬蟲進階二之資料儲存(資料庫儲存)——8.PostgreSQL儲存

安裝PostgreSQL資料庫方法詳見:https://www.cnblogs.com/luyj00436/p/15525370.html

安裝庫

Psycopg是Python程式語言中最流行的PostgreSQL資料庫介面卡,其主要功能是完整實現Python DB API 2.0規範和執行緒安全(多個執行緒可以共享相同的連結)。它專為大量多執行緒應用程式而設計,可以建立和銷燬大量遊標,並建立大量併發“INSERT”或“UPDATE”。

Psycopg 2 主要在C語言中作為libpq包裝實現,既高效又安全,它具有客戶端和服務端遊標,非同步通訊通知,“複製到/複製”支援。許多Python型別都支援開箱即用,適用匹配PostgreSQL資料型別,通過靈活的物體適應系統,可以擴充套件和定製適應性。Psycopg 2 相容Unicode和Python 3。

在學習之前先安裝Psycopg 2庫,可以使用pip命令進行安裝。

pip install psycopg2

在確保已經有一個可以連線的PostgreSQL 資料的情況下,進行接下來的學習和操作。下面是獲取pg資料連線的示例。

 1 import psycopg2
 2 
 3 # 建立PostgreSQL資料庫連線物件
 4 conn = psycopg2.connect(
 5     database="postgres",
 6     user="postgres",
 7     password="123456",
 8     host="localhost",
 9     port="
5432" 10 ) 11 12 cur = conn.cursor() # 建立執行物件

通過cursor()方法拿到了指標物件,有了這個就可以用它執行sql語句。這與之前講到的MySQL 操作類似。

1. 插入資料

插入資料時,只需要使用者將插入的sql語句寫好,然後使用cur執行操作物件execute()方法即可完成sql的執行,示例程式碼如下:

 1 import psycopg2
 2 
 3 # 建立PostgreSQL資料庫連線物件
 4 conn = psycopg2.connect(
 5     database="postgres",
 6     user="postgres
", 7 password="123456", 8 host="localhost", 9 port="5432" 10 ) 11 cur = conn.cursor() # 建立執行物件 12 13 # 建立表 14 cur.execute("CREATE TABLE student(id integer,name varchar ,sex varchar);") 15 # 插入資料 16 cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(1,'Aspirin','M')) 17 cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(2,'Taxol','F')) 18 cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(3,'Dixheral','M')) 19 20 # 關閉連線 21 conn.commit() 22 cur.close() 23 conn.close()

2. 查詢資料

查詢資料時,可以在執行完sql語句後,呼叫cur的fetchall()方法獲取結果。示例程式碼如下:

cur.execute('SELECT * FROM student')
result = cur.fetchall()

3. 修改和刪除資料

修改與刪除資料與插入類似,唯一不同的就是sql語句,示例程式碼如下:

 1 import psycopg2
 2 
 3 # 建立PostgreSQL資料庫連線物件
 4 conn = psycopg2.connect(
 5     database="postgres",
 6     user="postgres",
 7     password="123456",
 8     host="localhost",
 9     port="5432"
10 )
11 cur = conn.cursor() # 建立執行物件
12 
13 # 修改資料
14 cur.execute("UPDATE student set name='TiMi',sex='M' WHERE id=2")
15 # # 刪除資料
16 cur.execute("DELETE from student WHERE id=3;")
17 
18 # 關閉連線
19 conn.commit()
20 print(cur.rowcount ,"條記錄被修改")
21 cur.close()
22 conn.close()
有志者,事竟成,破釜沉舟,百二秦關終屬楚; 苦心人,天不負,臥薪嚐膽,三千越甲可吞吳。