爬蟲與Python:(四)爬蟲進階二之資料儲存(資料庫儲存)——8.PostgreSQL儲存
阿新 • • 發佈:2021-11-08
安裝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()有志者,事竟成,破釜沉舟,百二秦關終屬楚; 苦心人,天不負,臥薪嚐膽,三千越甲可吞吳。