網站首頁 編程語言 正文
1.簡介
Psycopg是一種用于執行SQL語句的PythonAPI,可以為PostgreSQL、openGauss數據庫提供統一訪問接口,應用程序可基于它進行數據操作。Psycopg2是對libpq的封裝,主要使用C語言實現,既高效又安全。它具有客戶端游標和服務器端游標、異步通信和通知、支持“COPY TO/COPY FROM”功能。支持多種類型Python開箱即用,適配PostgreSQL數據類型;通過靈活的對象適配系統,可以擴展和定制適配。Psycopg2兼容Unicode和Python 3。
openGauss數據庫提供了對Psycopg2特性的支持,并且支持Psycopg2通過SSL模式鏈接。
2.接口介紹
開發流程
接口說明
openGauss提供了如下接口供開發者使用:
- psycopg2.connect()
此方法創建新的數據庫會話并返回新的connection對象(連接openGauss數據庫實例的對象)。
conn=psycopg2.connect(dbname=“test”,user=“postgres”,password=“secret”,host=“127.0.0.1”,port=“5432”)
或者
conn = psycopg2.connect(“dbname=test user=postgres password=secret
host=127.0.0.1 port=5432”)
創建連接對象(SSl連接)
conn = psycopg2.connect(dbname=“postgres”, user=“user”, password=“password”, host=“localhost”, port=port, sslmode=“verify-ca”, sslcert=“client.crt”, sslkey=“client.key”, sslrootcert=“cacert.pem”)
注意: 如果sslcert, sslkey,sslrootcert沒有填寫,默認取當前用戶.postgresql目錄下對應的client.crt, client.key, root.crt
- connection.cursor()
此方法用于返回新的cursor對象(用于整個數據庫使用Python編程的cursor)。
cursor(name=None, cursor_factory=None, scrollable=None,
withhold=False)
- cursor.execute(query,vars_list)
此方法執行被參數化的SQL語句(即占位符,而不是SQL文字)。psycopg2模塊支持用%s標志的占位符。
curosr.execute(query,vars_list)
- curosr.executemany(query,vars_list)
此方法執行SQL命令所有參數序列或序列中的SQL映射。
curosr.executemany(query,vars_list)
- connection.commit()
此方法將當前掛起的事務提交到數據庫。默認情況下,Psycopg在執行第一個命令之前打開一個事務:如果不調用commit(),任何數據操作的效果都將丟失。
connection.commit()
- connection.rollback()
此方法回滾當前掛起事務。執行關閉連接“close()”而不先提交更改“commit()”將導致執行隱式回滾。
connection.rollback()
- cursor.fetchone()
此方法提取查詢結果集的下一行,并返回一個元組。返回單個元組,為結果集的第一條結果,當沒有更多數據可用時,返回為“None”。
cursor.fetchone()
- cursor.fetchall()
此方法獲取查詢結果的所有(剩余)行,并將它們作為元組列表返回。返回元組列表,為結果集的所有結果。空行時則返回空列表。
cursor.fetchall()
- cursor.close()
此方法關閉當前連接的游標。
cursor.close()
- connection.close()
此方法關閉數據庫連接。此方法關閉數據庫連接,并不自動調用commit()。如果只是關閉數據庫連接而不調用commit()方法,那么所有更改將會丟失。
connection.close()
3.使用
3.1環境準備
本篇使用環境信息:
- 華為云HECS 2核4G
- CentOS Linux release 7.6
- Python 3.6.8
- openGauss 3.1.0 極簡版
3.2下載并加載python驅動
1、可以在openGauss官網下載后用FTP工具比如winscp等上傳到服務器,也可以直接在服務器上用wget方式獲取,根據操作系統版本下載對應的驅動。
root用戶下新建存放目錄,執行wget和解壓命令。
mkdir psycopg2
wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/3.1.0/x86/openGauss-3.1.0-CentOS-x86_64-Python.tar.gz
tar -zxvf openGauss-3.1.0-CentOS-x86_64-Python.tar.gz
解壓后有兩個文件夾 lib和psycopg2,分別放置對應的庫文件。
2、在解壓后的路徑下執行拷貝命令,將驅動拷貝到python3下的site-packages目錄
cp -r psycopg2/ /usr/lib/python3.6/site-packages/
3、修改psycopg2/目錄權限為755
cd /usr/lib/python3.6/site-packages/
chmod 755 psycopg2/
4、對于非數據庫用戶,需要將解壓后的lib目錄,配置在LD_LIBRARY_PATH中。
export $LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/psycopg2/lib/
ldconfig
3.3創建數據庫連接用戶
注意,由于psycopg2只能使用MD5方式連接,而openGauss默認安裝時使用sha256加密,所以這里需要修改一下配置。
修改 data/single_node/postgresql.conf 中password_encryption_type = 1 ,表示支持md5和sha256。
修改pg_hba.conf 中加密算法
然后重啟openGauss:gs_ctl restart -D /opt/software/openGauss/data/single_node
連接到openGauss創建用戶和數據庫。
create database mydb;
CREATE USER tuser WITH PASSWORD '自己定義';
GRANT ALL PRIVILEGES TO tuser;
alter database mydb owner to tuser;
如果在修改加密方式前之前已經創建過用戶了,需要在配置文件修改及數據庫重啟完成后,重新建用戶或者設置用戶密碼。
3.4示例
編寫python文件
vi ogconn.py
將如下測試語句拷貝進去,根據實際情況修改對應的openGauss數據庫連接信息。
import psycopg2
conn=psycopg2.connect(database="mydb",user="tuser",password="XXXXXXX",host="127.0.0.1",port=5432)
#或者用下面的也可以
#conn = psycopg2.connect("dbname=mydb user=tuser password=password host=localhost port=port")
print("Conn openGauss successfully")
cur=conn.cursor()
cur.execute("DROP TABLE IF EXISTS student")
cur.execute("CREATE TABLE student(id integer,name varchar,sex varchar);")
cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(1,'Bob','M'))
cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(2,'Kevin','M'))
cur.execute('SELECT id,name,sex FROM student')
results=cur.fetchall()
print (results)
conn.commit()
cur.close()
conn.close()
連接測試
python3 ogconn.py
報錯了,psycopg2.OperationalError: SCRAM authentication requires libpq version 10 or above
解決辦法:
根據提示升級版本
rpm -Uvh https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql10-devel
根據提示輸入y,等提示Complete!
重新測試連接
注意,如果使用本地工具連接遠端云服務器的數據庫時,需要修改云服務器安全組,將openGauss的端口放開,否則會連接不上。
4.常見報錯
執行python3 ogconn.py報錯
1.提示如下錯誤
File “/opt/software/psycopg2/psycopg2/init.py”, line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: SCRAM authentication requires libpq version 10 or above
這個錯是說libpq版本應該在10以上,需要升級下版本。
解決辦法:
rpm -Uvh https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql10-devel
根據提示輸入y,等提示Complete!
2.提示如下錯誤:
psycopg2.OperationalError: none of the server’s SASL authentication mechanisms are supported
這個就是加密方式的問題,參考文章中“創建數據庫連接用戶”部分解決。
原文鏈接:https://blog.csdn.net/GaussDB/article/details/128091194
相關推薦
- 2022-12-30 React錯誤邊界Error?Boundaries詳解_React
- 2022-07-18 Element-UI:el-table樣式修改
- 2022-06-10 AJAX原理以及axios、fetch區別實例詳解_AJAX相關
- 2022-03-13 .Net6開發winform程序使用依賴注入_C#教程
- 2022-03-05 C#多線程用法詳解_C#教程
- 2022-06-26 python數據處理之Pandas類型轉換的實現_python
- 2022-11-07 PostgreSQL長事務概念解析_PostgreSQL
- 2022-11-28 詳解Pytorch如何利用yaml定義卷積網絡_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支