You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastApi异步环境下如何通过SQLAlchemy.AsyncSession调用oracledb Connection.gettype

在FastAPI中使用python-oracledb异步连接池获取自定义DbObjectType的问题

我在FastAPI应用中使用python-oracledb异步连接池(thin模式),想要调用Connection.gettype(name)方法获取自定义DbObjectType,但遇到以下问题:

  • 通过(await (await session.connection()).get_raw_connection()).cursor()无法获取connection属性;
  • await session.connection()和await (await session.connection()).get_raw_connection()均没有gettype属性。

此前在cx_Oracle连接的cursor中,实现方式如下:

# cursor: Connection cursor
# data: list):
my_type = cursor.get_connection().gettype('MY_SCHEMA.MY_TYPE_ARRAY').newobject()
my_type.extend(data)

解决方法

在python-oracledb异步模式下,直接从原生异步连接对象操作即可,步骤如下:

  1. 获取python-oracledb原生异步连接对象
    SQLAlchemy的session.connection()返回的是包装后的连接,需要通过get_raw_connection()拿到底层的python-oracledb异步连接:
async_conn = await (await session.connection()).get_raw_connection()
  1. 异步调用gettype方法
    python-oracledb异步API中gettype是协程方法,必须用await调用:
my_type = await async_conn.gettype('MY_SCHEMA.MY_TYPE_ARRAY')
my_type_obj = my_type.newobject()
my_type_obj.extend(data)
  1. 关键注意点
  • 确保使用python-oracledb 2.0及以上版本,异步thin模式对自定义类型的支持在该版本后才完善;
  • 无需通过cursor中转获取连接,直接使用异步连接对象调用gettype即可。

内容的提问来源于stack exchange,提问作者Kamo Petrosyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:54:56