python-oracledb 已率先支持 Oracle 23ai

python-oracledb 已率先支持 Oracle 23ai

ShawnYan Lv.6

python-oracledb 介绍

python-oracledb (以下简称 oracledb) 是 Python cx_Oracle 驱动程序的新名称,如果你仍在使用 cx_Oracle,建议升级到最新版本的 oracledb。

oracledb 驱动程序是一个开源模块,使 Python 程序能够访问 Oracle 数据库。默认情况下,oracledb 使用 Thin 模式,不需要依赖 Oracle 客户端类库。

该模块目前支持 Python 3.7 到 3.12,可用于 Oracle 数据库 23ai, 19c, 12c 和 11gR2 等版本。

pythonoracledb.png

oracledb 最新版本为 2.2.0,以支持 23ai 的如下特性:

  1. 支持 VECTOR 数据类型。
  2. 支持隐式连接池,DRCP (数据库驻留连接池) 和 PRCP (代理驻留连接池),通过新参数 pool_boundary 启用。
  3. 为从 OCI 云网络连接到 Oracle Autonomous Database Serverless (ADB-S) 的应用程序添加了对 TCP Fast Open 的支持,通过新的 use_tcp_fast_open 参数启用。
  4. 增加了 oracledb.JsonId 类,以表示存储在本机集合中的文档的 _id 属性中由 SODA 返回的 JSON ID 值。
  5. 增加了对 23ai JSON 功能的支持,并允许字段名称具有超过 255 个 UTF-8 编码字节。
  6. 增加了 SQL 域的属性 FetchInfo.domain_schemaFetchInfo.domain_nameFetchInfo.annotations 以及与要获取的列关联的注释。
oracledbDRCP.png

python-oracledb 安装

准备 Python 环境,这里使用的是 Python 3.9。

1
2
$ python --version
Python 3.9.18

然后,安装 pip 工具。

1
2
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

使用 pip 安装 python-oracledb 包。

1
2
3
4
5
6
7
8
$ pip install oracledb
...
Requirement already satisfied: cryptography>=3.2.1 in /usr/lib64/python3.9/site-packages (from oracledb) (36.0.1)
Requirement already satisfied: cffi>=1.12 in /usr/lib64/python3.9/site-packages (from cryptography>=3.2.1->oracledb) (1.14.5)
Requirement already satisfied: pycparser in /usr/lib/python3.9/site-packages (from cffi>=1.12->cryptography>=3.2.1->oracledb) (2.20)
Requirement already satisfied: ply==3.11 in /usr/lib/python3.9/site-packages (from pycparser->cffi>=1.12->cryptography>=3.2.1->oracledb) (3.11)
Installing collected packages: oracledb
Successfully installed oracledb-2.2.0

到此, oracledb 已经安装完成,可以看到这里安装的是最新版本 2.2.0。

使用 oracledb 连接 23ai

下面举个栗子,演示如何使用 oracledb 连接到 Oracle 23ai 数据库。

代码基本流程如下:

  1. 引入 oracledb 包
  2. 创建独立连接
  3. 分别查看客户端和服务器端版本
  4. 创建测试表,其中一列的数据类型为向量
  5. 插入测试数据
  6. 查询测试表数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import oracledb

conn = oracledb.connect(dsn="SHAWNYAN/1@127.1:1521/FREEPDB1", mode=oracledb.AUTH_MODE_SYSDBA)

print("Client version: ", oracledb.__version__)

if conn.is_healthy():
print("Server version: ", conn.version)
else:
print("Unusable connection. Please check.")

cursor = conn.cursor()

create_vector_table = """
CREATE TABLE IF NOT EXISTS orders
(order_id INT, order_vector VECTOR)"""

cursor.execute(create_vector_table)
conn.commit()

insert_vector = "insert into orders values (1, '[1, 2]')"

cursor.execute(insert_vector)
conn.commit()

sql = "SELECT order_id, from_vector(order_vector) FROM ORDERS"

cursor.execute(sql)
result = cursor.fetchall()
for row in result:
print(row)

cursor.close()
conn.close()
print("See u.")

输出结果:

1
2
3
4
Client version:  2.2.0
Server version: 23.4.0.24.5
(1, '[1.0E+000,2.0E+000]')
See u.

小结

本文介绍了如何使用 python-oracle 连接 Oracle Database 23ai,并演示在代码中操作向量类型。

下一篇,将介绍两种连接池的用法。

往期回顾

– END. –

logo.jpg

如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)

  • Title: python-oracledb 已率先支持 Oracle 23ai
  • Author: ShawnYan
  • Created at: 2024-05-08 23:00:00
  • Updated at: 2024-05-08 23:00:00
  • Link: https://shawnyan.cn/2024/oracle/oracle-23ai-with-python-oracledb-intro/
  • License: This work is licensed under CC BY-NC-SA 4.0.
if (hexo-config('comment.enable') == true && hexo-config('comment.system') != "") { if (hexo-config('comment.system') == "waline") { @require "./waline.styl" } else if (hexo-config('comment.system') == "gitalk") { @require "./gitalk.styl" } else if (hexo-config('comment.system') == "twikoo") { @require "./twikoo.styl" } } .comments-container display inline-block margin-top $spacing-unit width 100% #comment-anchor width 100% height 10px .comment-area-title width 100% margin 10px 0 font-size 1.38rem color var(--default-text-color) font-family 'Consolas', '宋体', sans-serif font-weight bold i color var(--default-text-color) +redefine-tablet() margin 5px 0 font-size 1.2rem