[带有SQLAlchemy的Python中具有Asyncio的cx_oracle

问题描述 投票:0回答:1

我对于在不同时间发布此主题的不同主题感到困惑。cx_Oracle的最新版本(截至2019年12月)是否具有Asyncio的此功能?

我正在使用下面的代码段,这些代码段正在运行,但是不确定这是否是对Oracle进行异步调用的理想方法?任何指针都会有所帮助。

import asyncio

async def sqlalchemyoracle_fetch():
      conn_start_time = time()
      oracle_tns_conn = 'oracle+cx_oracle://{username}:{password}@{tnsname}'
      engine = create_engine(
    oracle_tns_conn.format(
        username=USERNAME,
        password=PWD,
        tnsname=TNS,
    ),
    pool_recycle=50,
)

    for x in test:
        pd.read_sql(query_randomizer(x), engine) 

!调用自定义query_randomizer函数,该函数将根据通过test的参数列表执行oracle查询

async def main():
        tasks = [sqlalchemyoracle_asyncfetch()]
        return await asyncio.gather(*tasks)

if __name__ == "__main__":
    result = await main()
oracle sqlalchemy python-asyncio cx-oracle
1个回答
0
投票

我使用cx_Oracle库,但不使用SQLAlchemy。从v7.3开始,不支持asyncio。

此问题跟踪并确认-https://github.com/oracle/python-cx_Oracle/issues/178

并且不,您的代码块不会异步运行,尽管使用async def进行了定义,但代码块中没有异步语句。要实现异步,您的异步函数要么需要等待另一个异步函数(已经支持异步操作),要么使用yield指示可能的上下文切换。这些都不会在您的代码块中发生。

© www.soinside.com 2019 - 2024. All rights reserved.