GBase 8s
其他
文章

使用python-gbase8sdb操作GBase 8s数据库

发表于2025-03-24 16:57:39427次浏览0个评论

python-gbase8sdb介绍

GBase 8s V8.8作为信创数据库,广泛应用于金融、交通、电信、能源等行业。为扩展和补充开发生态,GBase 8s技术团队提供了数据库的python语言驱动python-gbase8sdb

python-gbase8sdb 是一个 Python 编程语言扩展模块,允许 Python 程序连接到 GBase 8s 数据库, 目前支持Python3.7至Python3.12版本。

该模块符合 Python 数据库 API 2.0 规范,并且包含大量扩展和少数排除项。

1 安装

 pip install gbase8sdb

2 连接数据库

2.1 配置GSDK

gbase8sdb驱动连接数据库依赖GSDK 1.1版本 ,所以您需要联系GBase 8s技术支持或通过官方渠道获取相应版本的GSDK,并安装到您的机器上, 并设置如下环境变量:

GSDK_PATH=/path/to/gsdk
export LD_LIBRARY_PATH=${GSDK_PATH}/lib:$LD_LIBRARY_PATH

2.2 导入gbase8sdb

 import gbase8sdb

2.3 创建数据库连接

# 生成dsn
dsn = gbase8sdb.makedsn(
    server_name="ol_gbasedbt1210_2",    # 数据库实例名称    
    db_name="testdbutf8",               # 数据库名称    
    host="192.168.xxx.xxx",             # 数据库实例所在服务器的IP地址或域名    
    port=9088,                          # 数据库实例的端口号    
    db_locale='zh_CN.utf8'              # 数据库字符集
)
user = "gbasedbt"                       # 数据库用户名
password = "xxxxxx"                     # 数据库用户密码​
# 创建数据库连接
conn = gbase8sdb.connect(dsn, user, password) 

3 数据库操作

3.1 创建游标对象

 cursor = conn.cursor()

3.2 建表

cursor.execute("drop table if exists t")
cursor.execute("""
    create table t(    
    	c_int int primary key,    
    	c_float float,    
    	c_varchar varchar(100),    
    	c_timestamp timestamp,    
    	c_interval interval day to second,    
    	c_blob blob,    
    	c_clob clob,    
    	c_bool number(1)
    )"""
)

3.3 插入int float varchar类型数据

cursor.execute("""
    insert into t(c_int, c_float, c_varchar)     values(?, ?, ?)
    """,    (1, 3.14, 'hello gbase8sdb')
)

3.4 插入timestamp interval类型数据

import datetime

cursor.execute("""
    insert into t(c_int, c_timestamp, c_interval)     
    values(?, ?, ?)
    """,    (2, datetime.datetime.now(), datetime.timedelta(days=1, seconds=2))
)

3.5 插入blob clob类型数据

# 获取图片的字节序列
with open("picture.jpg", 'rb') as f:
    blob_data = f.read()
    
# 将字节序列保存到blob列中,clob列中存储超长字符串
cursor.execute("""
    insert into t(c_int, c_blob, c_clob)     
    values(?, ?, ?)
    """,    (3, blob_data, '你好' * 1024 * 1024)
)

3.6 插入boolean类型数据

cursor.execute("""
    insert into t(c_int, c_bool)    values(?, ?)
    """,    (4, True)   
)

3.7 获取查询结果

3.7.1 查询非大对象数据

cursor.execute("select c_blob, c_clob from t where c_int in (?, ? ,?)", (1, 2, 4))
print(cursor.fetchall())

3.7.2 查询大对象数据

cursor.execute("select c_blob, c_clob from t where c_int = ?", (3,))
for row in cursor.fetchall():
    blob_obj, clob_obj = row[0]  # 返回LOB类型对象    
    # 从LOB对象中获取数据    
    blob_data = blob_obj.read()      
    clob_data = clob_obj.read()

4 关闭游标和连接

cursor.close()
conn.close()

 

评论

登录后才可以发表评论