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异步模式下,直接从原生异步连接对象操作即可,步骤如下:
- 获取python-oracledb原生异步连接对象
SQLAlchemy的session.connection()返回的是包装后的连接,需要通过get_raw_connection()拿到底层的python-oracledb异步连接:
async_conn = await (await session.connection()).get_raw_connection()
- 异步调用
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)
- 关键注意点
- 确保使用python-oracledb 2.0及以上版本,异步thin模式对自定义类型的支持在该版本后才完善;
- 无需通过cursor中转获取连接,直接使用异步连接对象调用
gettype即可。
内容的提问来源于stack exchange,提问作者Kamo Petrosyan
相关产品推荐
相关产品推荐

