教你使用Psycopg2连接openGauss的方法

目录
  • 1.简介
  • 2.接口介绍
    • 开发流程
    • 接口说明
  • 3.使用
    • 3.1环境准备
    • 3.2下载并加载python驱动
    • 3.3创建数据库连接用户
    • 3.4示例
  • 4.常见报错

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
这个就是加密方式的问题,参考文章中“创建数据库连接用户”部分解决。

到此这篇关于教你使用Psycopg2连接openGauss的方法的文章就介绍到这了,更多相关Psycopg2连接openGauss内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python中用psycopg2模块操作PostgreSQL方法

    其实在Python中可以用来连接PostgreSQL的模块很多,这里比较推荐psycopg2.psycopg2安装起来非常的简单(pip install psycopg2),这里主要重点介绍下如何使用. 安装psycopg2模块: 怎么验证是否已经安装过psycopy2? 编写上面代码,运行看是否抛出缺少psycopg2模块. 安装方法1: 1)使用psycopg2-2.4.2.win-amd64-py2.7-pg9.0.4-release.exe安装,下载地址:http://vdisk.wei

  • 解决pip install psycopg2出错问题

    pip install psycopg2出现错误: Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting psycopg2 Using cached https://pypi.tuna.tsinghua.edu.cn/packages/84/d7/6a93c99b5ba4d4d22daa3928b983cec66df4536ca50b22ce5dcac65e4e71/psycopg2-2.8.4.tar.g

  • 安装python依赖包psycopg2来调用postgresql的操作

    1.先安装psycopg2的依赖组件 本案例的操作系统为linux red hat 在安装python依赖包psycopg之前,你必须需要先安装postgresql数据库的相关组件: postgresql-devel,postgresql,postgresql-libs这三个组件比较重要.另外,可选组件:postgresql-server 安装上述组件之前,可以用命令来查看你的系统现在是否已经安装了相关组件: [root@dthost27 ~]# rpm -qa | grep PostgreSQ

  • 基于PostgreSQL/openGauss 的分布式数据库解决方案

    在 MySQL ShardingSphere-Proxy 逐渐成熟并被广泛采用的同时,ShardingSphere 团队也在 PostgreSQL ShardingSphere-Proxy 上持续发力.相比前期的 alpha 与 beta,5.0.0 正式版对 PostgreSQL 的协议实现.SQL 支持度.权限控制等方面进行了大量的完善,为后续全面对接 PostgreSQL 生态打下基础.ShardingSphere-Proxy 与 PostgreSQL 的生态对接,让用户能够在 Postg

  • 教你使用Psycopg2连接openGauss的方法

    目录 1.简介 2.接口介绍 开发流程 接口说明 3.使用 3.1环境准备 3.2下载并加载python驱动 3.3创建数据库连接用户 3.4示例 4.常见报错 1.简介 Psycopg是一种用于执行SQL语句的PythonAPI,可以为PostgreSQL.openGauss数据库提供统一访问接口,应用程序可基于它进行数据操作.Psycopg2是对libpq的封装,主要使用C语言实现,既高效又安全.它具有客户端游标和服务器端游标.异步通信和通知.支持“COPY TO/COPY FROM”功能.

  • Linux环境下的Java(JDBC)连接openGauss数据库实践记录

    目录 一.测试环境: 本实验预置环境 二.Linux环境安装Java环境及配置步骤 三.准备链接数据库的环境 四.连接测试 五.经验小结(FAQ) 一.测试环境: 本实验预置环境 1)操作系统版本:CentOS 7 64位(CentOS Linux release 7.6.1810)2)DataBase & JDBC版本: openGauss 2.0.1. JDBC驱动版本:JDBC_2.0.0官方下载地址:https://opengauss.org/zh/download/ (Tips:官方最

  • go语言操作redis连接池的方法

    本文实例讲述了go语言操作redis连接池的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: func newPool(server, password string) *redis.Pool {     return &redis.Pool{         MaxIdle: 3,         IdleTimeout: 240 * time.Second,         Dial: func () (redis.Conn, error) {             c

  • php5.3以后的版本连接sqlserver2000的方法

    最近在做一个系统要抓取管家数据库里面的几个表的数据显示在web页面,于是乎上网搜了一下php如何连接sqlserver2000数据库,网上很多教材都是要配置php.ini配置文件,去掉;extension=php_mssql.dll前面的分号";",然后把ext文件里面php_mssql.dll复制粘贴到系统盘system32目录下,然后重启apache服务器即可,然后写连接数据库的代码件:<?php $conn=mssql_connect("服务器",&qu

  • java连接mysql数据库及测试是否连接成功的方法

    本文实例讲述了java连接mysql数据库及测试是否连接成功的方法.分享给大家供大家参考,具体如下: package com.test.tool; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement

  • 64位win7下pl/sql无法连接oracle解决方法

    1.pl/sql无法连接本机的oracle(ORA 12154:TNS:无法解析指定的连接标识符) 解决方法:pl/sql不能安装在Program Files(x86)文件夹下,要安装在Program Files文件夹下 2.pl/sql无法连接远程oracle(ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务) 解决方法:①在linux下找到oracle目录下的listener.ora,用vi编辑②下面红色为添加部分,其中GLOBAL_DBNAME要与客户机配置的or

  • Python连接phoenix的方法示例

    本文实例讲述了Python连接phoenix的方法.分享给大家供大家参考,具体如下: phoenix是由saleforce.com开源的一个项目,后又捐给了Apache.它相当于一个Java中间件,帮助开发者,像使用jdbc访问关系型数据库一些,访问NoSql数据库HBase.可以把Phoenix只看成一种代替HBase的语法的一个工具.虽然可以用java可以用jdbc来连接phoenix,然后操作HBase,但是在生产环境中,不可以用在OLTP中. Phoenix官网:http://phoen

  • asp.net通过配置文件连接Access的方法

    本文实例讲述了asp.net通过配置文件连接Access的方法.分享给大家供大家参考.具体分析如下: 这里数据库blog.mdb存放在App_Data中 配置文件 <connectionStrings> //方法一 <add name="access_conn" connectionString="Provider=Microsoft.Jet.Oledb.4.0;data source="/> <add name="acces

  • python查看FTP是否能连接成功的方法

    本文实例讲述了python查看FTP是否能连接成功的方法.分享给大家供大家参考.具体如下: #!/usr/local/bin/python #-*- coding: UTF-8 -*- #################################################################### # python 查看FTP是否能连接成功 ##################################################################

随机推荐