Python使用psycopg2三方庫操作PostgreSQL的資料

T1YSL發表於2022-10-21

psycopg2,是Python語言的PostgreSQL資料庫介面,它的主要優勢在於完全支援Python DB API 2.0,以及安全的多執行緒支援。它適用於隨時建立、銷燬大量遊標的、和產生大量併發INSERT、UPDATE操作的多執行緒資料庫應用。本文簡單介紹了使用psycopg2對PostgreSQL增刪改查的基本操作,供參考。

首先,要安裝python,pip以及psycopg2。

[xmaster@mogdb-kernel-0005 demo2]$ python3 --version
Python 3.6.8[xmaster@mogdb-kernel-0005 demo2]$ pip3 --version
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)
[xmaster@mogdb-kernel-0005 ~]$ pip3 install psycopg2
Collecting psycopg2
Installing collected packages: psycopg2
Successfully installed psycopg2-2.9.4

可以使用pip list檢視是否安裝該類庫

[xmaster@mogdb-kernel-0005 ~]$ pip3 list --format=columns| grep psycopg2
psycopg2                  2.9.4

一、select操作

編輯python程式碼檔案psycopg2_demo.py ,內容如下

#!/usr/bin/env python # -*- coding:utf-8 -*-import psycopg2  
'''連線串'''conn = psycopg2.connect(database="postgres", user="puser", password="Enmo@123", host="172.16.0.176", port="5432")'''開啟遊標'''cur = conn.cursor()'''執行語句'''cur.execute("select * from public.demotable limit 10;")'''獲取結果集的每一行'''rows = cur.fetchall()'''迴圈輸出結果行'''for row in  rows:
print(row)'''關閉遊標'''conn.close()

初次執行程式碼報錯了,是沒找到libpq.so.5的位置,

[xmaster@mogdb-kernel-0005 demo2]$ python3 psycopg2_demo.py 
Traceback (most recent call last):
  File "psycopg2_demo.py", line 1, in <module>    import psycopg2
  File "/usr/local/lib64/python3.6/site-packages/psycopg2/__init__.py", line 51, in <module>    from psycopg2._psycopg import (                     # noqaImportError: libpq.so.5: cannot open shared object file: No such file or directory

解決方法為:

[root@mogdb-kernel-0005 lib64]# cd /etc/ld.so.conf.d[root@mogdb-kernel-0005 ld.so.conf.d]# lsbind-export-x86_64.conf  kernel-4.18.0-348.7.1.el8_5.x86_64.conf  kernel-4.18.0-80.el8.x86_64.conf  oracle-instantclient.conf
[root@mogdb-kernel-0005 ld.so.conf.d]# ps -ef | grep postgres | grep xmasterxmaster   182525       1  0 Oct15 ?        00:00:00 /opt/ysl_pg14/soft/bin/postgres -D /opt/ysl_pg14/data
xmaster   182526  182525  0 Oct15 ?        00:00:00 postgres: enmo_6001: logger 
xmaster   182528  182525  0 Oct15 ?        00:00:00 postgres: enmo_6001: checkpointer 
xmaster   182529  182525  0 Oct15 ?        00:00:00 postgres: enmo_6001: background writer 
xmaster   182530  182525  0 Oct15 ?        00:00:00 postgres: enmo_6001: walwriter 
xmaster   182531  182525  0 Oct15 ?        00:00:00 postgres: enmo_6001: autovacuum launcher 
xmaster   182532  182525  0 Oct15 ?        00:00:01 postgres: enmo_6001: stats collector 
xmaster   182533  182525  0 Oct15 ?        00:00:00 postgres: enmo_6001: logical replication launcher 
[root@mogdb-kernel-0005 ld.so.conf.d]# echo  "/opt/ysl_pg14/soft/lib" >pgsql.conf[root@mogdb-kernel-0005 ld.so.conf.d]# ldconfig

再次執行,結果如下,其中Decimal模組旨在支援"無偏差,精確無舍入的十進位制算術(有時稱為定點數算術)和有舍入的浮點數算術"。

[root@mogdb-kernel-0005 ld.so.conf.d]# su - xmasterLast login: Mon Oct 17 16:05:10 CST 2022 on pts/2[xmaster@mogdb-kernel-0005 ~]$ cd python/demo2/
[xmaster@mogdb-kernel-0005 demo2]$ python3 psycopg2_demo.py 
(Decimal('204.649350891795'), 1)
(Decimal('413.041252643858'), 2)
(Decimal('172.191698622928'), 3)
(Decimal('82.1547082639427'), 4)
(Decimal('204.480204721943'), 5)
(Decimal('992.275551901436'), 6)
(Decimal('382.85296867706'), 7)
(Decimal('530.280781107436'), 8)
(Decimal('655.705775705879'), 9)
(Decimal('245.699153678395'), 10)

二、insert和update操作

insert和update的如下

#!/usr/bin/env python # -*- coding:utf-8 -*-import psycopg2  
'''連線串'''conn = psycopg2.connect(database="postgres", user="puser", password="Enmo@123", host="172.16.0.176", port="5432")'''開啟遊標'''cur = conn.cursor()'''執行語句'''sql1="insert into  public.demotable values('0',0)"sql2="update public.demotable set num='111' where id=0 "cur.execute(sql1)
print('insert success!')
cur.execute(sql2)
print('update succes!')'''提交操作'''conn.commit()'''關閉遊標'''conn.close()

執行效果如下

[xmaster@mogdb-kernel-0005 demo2]$ psql -d postgres -c "select * from public.demotable where id=0"
 num | id -----+----
(0 rows)
[xmaster@mogdb-kernel-0005 demo2]$ python3 psycopg2_demo.py 
insert success!
update succes!
[xmaster@mogdb-kernel-0005 demo2]$ psql -d postgres -c "select * from public.demotable where id=0"
 num | id -----+---- 111 |  0(1 row)

三、delete操作

delete操作的程式碼如下

#!/usr/bin/env python # -*- coding:utf-8 -*-import psycopg2  
'''連線串'''conn = psycopg2.connect(database="postgres", user="puser", password="Enmo@123", host="172.16.0.176", port="5432")'''開啟遊標'''cur = conn.cursor()'''執行語句'''sql1="delete from public.demotable where id=0"cur.execute(sql1)
print('delete success!')'''提交操作'''conn.commit()'''關閉遊標'''conn.close()

結果如下

[xmaster@mogdb-kernel-0005 demo2]$ psql -d postgres -c "select * from public.demotable where id=0"
 num | id -----+---- 111 |  0(1 row)
[xmaster@mogdb-kernel-0005 demo2]$ python3 psycopg2_demo.py 
delete success!
[xmaster@mogdb-kernel-0005 demo2]$ psql -d postgres -c "select * from public.demotable where id=0"
 num | id -----+----
(0 rows)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2919712/,如需轉載,請註明出處,否則將追究法律責任。

相關文章