首页 > 数据库 >openGauss数据库之Python驱动快速入门

openGauss数据库之Python驱动快速入门

时间:2024-03-18 16:15:14浏览次数:22  
标签:入门 Python 数据库 cursor openGauss data id conn name

OpenGauss 数据库之 Python 驱动

openGauss 是一款开源关系型数据库管理系统,采用木兰宽松许可证 v2 发行。openGauss 内核源自 PostgreSQL,深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性。

可是目前针对于 OpenGauss 数据库的 Python 应用程序的开发少之又少,这其中的一个原因在于不知道用什么驱动来连接该数据库,特别是 Python 应用程序,在此我将给大家介绍如何使用 Python 驱动连接 OpenGauss 数据库,同时翻译了 psycopg2 的文档:psycopg2 中文文档,目前仍在维护和调整中,如果有任何建议,欢迎提 PR 来进行修正。

一、数据库部署

教程的第一步当然是引导大家部署数据库了,由于 OpenGauss 数据库与操作系统有一定的依赖关系,为了屏蔽掉不同操作系统之间部署的区别,我推荐使用Docker来进行部署,部署的脚本如下所示:

# 1.拉取镜像
docker pull enmotech/opengauss

# 2.开启opengauss数据库服务
docker run --name opengauss \
    --privileged=true -d \
    -e GS_USERNAME=gaussdb \
    -e GS_PASSWORD=**************@*** \
    -p 5432:5432 \
    enmotech/opengauss:latest

在以上代码中,默认数据库用户名为gaussdb,数据库密码为**************@***,开启服务的端口为5432,相信熟悉 Docker 的同学一眼就能看明白代码的含义。

可是在此部署的镜像当中只存在一个默认数据库:gaussdb,如果要添加新的数据库节点的话可以使用以下代码:

# 1. 进入运行的Docker容器
docker exec -it opengauss /bin/bash

# 2. 设置环境变量
export GAUSSHOME=/usr/local/opengauss
export PATH=$GAUSSHOME/bin:$GAUSSHOME:$GAUSSHOME/lib:$PATH
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH
export DATADIR='/var/lib/opengauss/data'

# 3. 使用gsql登陆opengauss数据库
gsql -U gaussdb -W **************@*** -d postgres -p 5432

# 4. 创建test_db数据库
CREATE DATABASE test_db WITH ENCODING 'UTF8' template = template0;

# 5. 重新加载OpenGauss数据库
gs_ctl reload -D $DATADIR

以上命令执行完毕之后即可创建对应的数据库。

安装教程

要想使用 Python 驱动在 OpenGauss 数据库上开发应用,非常简单,只需要安装以下包即可:

pip install psycopg2-binary

安装步骤只需要一步即可,接下来就可以开始应用程序的开发。

Simple Operations with OpenGauss

为了演示与数据库的基本操作,我将从创建会话连接、创建表、插入数据、修改数据、删除数据以及查询数据等六个方面来演示。

任何数据库的操作都是需要先创建连接来管理对应的事务,OpenGauss 也不例外:

创建会话连接

from psycopg2 import connect


def create_conn():
    """get connection from envrionment variable by the conn factory

    Returns:
        [type]: the psycopg2's connection object
    """
    env = os.environ
    params = {
        'database': env.get('OG_DATABASE', 'opengauss'),
        'user': env.get('OG_USER', 'gaussdb'),
        'password': env.get('OG_PASSWORD', '**************@***'),
        'host': env.get('OG_HOST', '***.***.***.***'),
        'port': env.get('OG_PORT', 5432)
    }
    conn: connection = connect(**params)
    return conn

以上代码中从环境变量中获取对应配置,从而创建与数据库的会话连接。

创建表

所有的数据操作都是在表上的操作,所以接下来就是需要创建对应的表:

def create_table(conn):
    """check and create table by example

    Args:
        table_name (str): the name of the table
        corsor (type): the corsor type to get into operation with db
    """
    sql = f"""SELECT EXISTS
        (
            SELECT 1
            FROM pg_tables
            WHERE tablename = '{table_name}'
        );"""
    with conn:
        with conn.cursor() as cursor:
            cursor.execute(sql)
            result = cursor.fetchone()
            if not result[0]:
                logger.info(f'creating table<{table_name}>')
                sql = f"""CREATE TABLE {table_name} (id serial PRIMARY KEY, name varchar, course varchar, grade integer);"""
                result = cursor.execute(sql)
                conn.commit()

以上代码中,首先是检测斗对应的表是否存在,如果不存在的话,便创建对应的表。

插入数据

def insert_data(conn) -> int:
    """insert faker data

    Args:
        cnn ([type]): the connection object to the databse
    """
    faker = Faker(locale=['zh-cn'])
    sql = f"insert into {table_name} (name, course, grade) values (%s,%s,%s) RETURNING *;"
    with conn:
        with conn.cursor() as cursor:
            age = random.randint(20, 80)
            result = cursor.execute(sql, (faker.name(), faker.name(), age))
            result = cursor.fetchone()
            logger.info(f'add data<{result}> to the databse')
            conn.commit()
    return result[0] if result else None

使用 SQL 语句来插入数据,语法与 Mysql 等数据库有些不一样,可是大同小异,都是能够看懂。在语句的后面返回当前操作的结果,也就是能够获取插入数据的 ID。

修改数据

def update_data(conn, student):
    """insert faker data

    Args:
        cnn ([type]): the connection object to the databse
    """
    faker = Faker(locale=['zh-cn'])
    sql = f"update {table_name} name=%s, course=%s, grade=%s where id={student.id};"
    with conn:
        with conn.cursor() as cursor:
            age = random.randint(20, 80)
            result = cursor.execute(sql, (faker.name(), faker.name(), age))
            result = cursor.fetchone()
            logger.info(f'update data<{result}> to the databse')
            conn.commit()

修改数据只需要使用以上代码的 SQL 语句即可,相信熟悉 SQL 的同学一眼就能看懂。

接下来就是删除数据了:

删除数据

def delete_data_by_id(conn, id: int):
    """delete data by primary key

    Args:
        conn ([type]): the connection object
        id (int): the primary key of the table
    """
    sql = f"delete from {table_name} where id = %s;"
    with conn:
        with conn.cursor() as cursor:
            cursor.execute(sql, (id,))
            logger.info(f'delete data from databse by id<{id}>')

获取数据

def get_data_by_id(conn, id: int):
    """fetch data by id

    Args:
        conn ([type]): the connection object
        id (int): the primary key of the table

    Returns:
        [type]: the tuple data of the table
    """
    sql = f"select * from {table_name} where id = %s;"
    with conn:
        with conn.cursor() as cursor:
            cursor.execute(sql, (id,))
            result = cursor.fetchone()
            logger.info(f'select data<{result}> from databse')
    return result

在以上代码中,通过 SELECT 语句筛选出对应的数据,这个接口是非常简单且通用的。

在以上代码中有一个规律,所有的操作都是需要在 Cursor 上进行操作,这是因为每一个原子事务的控制都是基于 cursor 对象,这样通过细粒度的控制能够很好的调度应用程序中所有的数据库交互操作。

在以上代码中,展示了最简单的数据连接与数据库查询,使用方法非常简单,并符合DB API v2的规范,从而让很多上有工具原生支持 opengauss 的操作,比如可直接在 Sqlalchemy ORM 工具中连接 Opengauss 数据库,这是一个非常重要的特性。

此处只是一个非常简单的数据库连接示例,后续我将持续发布一些深入的使用 Opengauss Python 数据库驱动的案例,录制了一个线上视频提供参考:

BiliBili-opengauss 使用之 python 驱动

总结

Opengauss 数据库是一个可处理高并发的高性能数据库,基于 PostgreSql 生态可轻松实现 Python 驱动应用程序的开发。

标签:入门,Python,数据库,cursor,openGauss,data,id,conn,name
From: https://www.cnblogs.com/renxyz/p/18080631

相关文章

  • Step-by-Step之-openGauss1-0-1单机安装指南v1-2
    StepbyStep之:openGauss1.0.1单机安装指南v1.2在CentOS7.6上安装openGauss单机版配置操作系统满足安装要求硬件环境:虚拟机的内存8GB,4核心CPU,900G磁盘(非必须)软件环境:CentOS7.6关闭防火墙#停止firewallsystemctlstopfirewalld.service#禁止firewall开机启......
  • openGauss的索引组织表
    openGauss的索引组织表概述今天有位小伙伴问我,Oracle数据库可以通过索引组织表(IOT)将数据按照主键排序存储,有序的数据存储可以有效提高数据库缓冲区的命中率,减少SQL查询的IO消耗,提升查询效率。而openGauss的建表语句中并没有看到索引组织表的相关语法。openGauss目前......
  • step-by-step系列之-openGauss1-0-1-Docker版本单机安装指南
    stepbystep系列之:openGauss1.0.1Docker版本单机安装指南1.软硬件环境硬件环境:项目最低配置推荐配置测试配置硬盘用于安装openGauss的硬盘需最少满足如下要求:至少1GB用于安装openGauss的应用程序包。每个主机需大约300MB用于元数据存储。预留70%以上的磁盘剩......
  • step-by-step之-install-docker版本opengauss1-0-1主备机群
    stepbystep之:installdocker版本opengauss1.0.1主备机群实验环境说明:OS:2颗8核心8GB内存。1.流程:先安装docker软件,下载Docker镜像,在创建启动主备容器数据库,进入数据库,进行主备切换试验。2.安装docker软件[root@node1~]#yum-yinstalldocker#检查docke......
  • openGauss增量备份恢复
    openGauss增量备份恢复openGauss数据库自2020年6月30日发布以来,很多小伙伴都提到“openGauss数据库是否有增量备份工具?“这么一个问题。在openGauss1.0.0版本的时候,关于这个问题的回答往往是:“Sorry…”,openGauss数据库可以使用gs_basebackup工具对数据库进行物......
  • openGauss的WDR报告详细解读
    openGauss的WDR报告详细解读openGauss数据库自2020年6月30日开源至今已有10个月了,在这短短的10个月内,openGauss社区用户下载量已达13W+、issue合并2000+、发行商业版本6个。仅3月份就有11家企业完成CLA签署,包括虚谷伟业、云和恩墨、优炫软件、海量数据......
  • openGauss数据动态脱敏
    openGauss数据动态脱敏常见脱敏路线结果集解析:不改写发给数据库的语句,需要提前获悉数据表结构,待数据库返回结果后再根据表结构判断集合内哪些数据需要脱敏,并逐条改写结果数据。语句改写:将包含敏感字段查询的语句改写,对于查询中涉及的敏感字段(表列)通过外层嵌套函数的方式改写......
  • 浅聊openGauss体系架构
    浅聊openGauss体系架构2020年7月openGauss刚刚开源,我便开始对openGauss数据库的学习。根据以往学习数据库的经验,最先想了解的是openGauss数据库的架构,希望对即将使用的数据库各个模块有所了解。但鉴于时间有限,仅有的资料图是源码doc目录内的“openGauss逻辑结构图......
  • 浅聊openGauss逻辑架构
    浅聊openGauss逻辑架构概述openGauss数据库是一款由华为主导、各个生态合作伙伴共同建设的开源关系型数据库管理系统,开源发行协议遵从木兰宽松许可证v2。openGauss数据库源于PostgreSQL-XC项目,内核源于Postgres9.2.4,总代码量约120W行,其中内核代码约95W行。华为结......
  • python安装模块的方式
    使用pip(在线)方式安装piplist//用于显示当前安装的所有模块和版本,pip本身也是一个模块1)若pip不存在则python-mensurepip//确保pip可用2)更新pippipinstall--upgradepip//更新pip3)安装包,以numpy为例python-mpipuninstallnumpy//卸载numpypython-mpipi......