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

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

时间:2024-04-10 15:46:18浏览次数:21  
标签:入门 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/helloopenGauss/p/18126158

相关文章

  • 那些场景需要进行实名认证?python身份证实名认证接口案例
    身份证实名认证接口是用来核验用户身份证信息真伪的接口,从而确保用户身份的真实性,常见的应用场景包含:1、在线教育:线上教育平台为了保障学习者身份的真实性和安全性,通常通过集成身份证实名认证接口来验证学习者身份是否为本人。2、企事业单位:政务部门、企事业单位等......
  • Oracle数据表搬迁到openGauss
    Oracle数据表搬迁到openGauss搬迁方法Oracle数据表搬迁到openGauss数据库比较容易想到的两个工具是oracle_fdw及Ora2Pg。oracle_fdworacle_fdw是嵌入在目标端数据库里的一个扩展插件,允许在目标端数据库里访问其他异构数据库的表,openGauss数据库目前也支持这一插件。......
  • 网络流入门
    最大流例题(T1)P2472[SCOI2007]蜥蜴提示1:最少的无法逃离的蜥蜴个数=总个数-最多的逃离的蜥蜴个数。提示2:对于一个高度为\(h\)的石柱,意味着只能有至多\(h\)条蜥蜴经过这个石柱。这类似最大流中的流量限制。正解:考虑将平面图转为网络流图的形式,那么对于每一个石......
  • 想用Python做副业?看这一篇就够了
    随着人工智能、大数据、物联网的广泛应用,与之紧密关联的Python技术开始受到人们的极大关注。各行业对Python技术服务的需求量呈指数级暴增,尤以爬虫技术服务为甚,供不应求早已成为常态。而近两年受到各种不可抗力的影响,做副业兼职赚钱的人越来越多。也是,在面对越来越大的资金......
  • python爬取京东商品信息与可视化
    项目介绍:使用python爬取京东电商拿到价格、店铺、链接、销量并做可视化...........................................................................................................................................................项目介绍效果展示全部代码..............
  • MXnet安装 与入门 符号式运算 Symbol 数据同步 KVStore 自动并行计算 数据的导出与载
    MXnet参考通过MXNet/Gluon来动手学习深度学习在线githubpdf代码深度学习库MXNet由dmlc/cxxnet,dmlc/minerva和Purine2的作者发起,融合了Minerva的动态执行,cxxnet的静态优化和Purine2的符号计算等思想,直接支持基于Python的parameterserver接口,使......
  • Python数据分析大作业(ARIMA 自回归积分滑动平均模型) 2000+字 图文分析文档 疫情分析
    资源地址:Python数据分析大作业2000+字图文分析文档疫情分析+完整python代码数据分析数据来自法国疫情数据时间序列是由四种因素组成的:长期趋势、季节变动、循环变动、随机波动。当我们对一个时间序列进行预测时,应该考虑将上述四种因素从时间序列中分解出来。分解之......
  • 使用Python+selenium+pytest+allure 编写ui自动化
    一、1.1背景:每次新发布功能后都需要手动跑冒烟用例,重复点击太多,消耗人力资源1.2测试项目:飞书第三方isv应用1.3技术栈:Python+Selenium+Pytest+Allure1.4框架设计:使用PageObject设计模式,将页面的元素和元素之间的操作方法进行分离。它有三层架构,分别为:基础封装层BasePage,PO页面......
  • 干货!Python 异常处理
    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。python标准异常异常名称描述BaseException所有异常的基类SystemExit解释器请求退出KeyboardInterrupt用户中断执行(通常是输入^C)Exception常规错误的基类Stop......
  • Python兼职要点,搞副业不踩坑!
    程序开发领域有这样一句话:人生苦短,我用Python。这本是开发者大佬BruceEckel的金句:Lifeisshort,youneedPython,有趣的是,很多人并非专职程序员,但却把这句话奉为神谕。所以Python究竟有什么神力,让全世界的人都追捧?我认为Python能大受欢迎,就是因为它可能是最容易学会、......