A very simple asynchronous wrapper that makes you can access to Oracle in asyncio programs.
Easy to use , buy may not the best practice for efficiency concern.
- cx_Oracle >= 8.1.0 (Take into consideration that author of cx_Oracle said he's trying to implement asyncio support , APIs maybe change in future version. Switch to 8.1.0 if there's something wrong makes it not gonna work.)
- ThreadPoolExecutorPlus >= 0.1.1
pip install cx_Oracle_async
- Nearly all the same with aiomysql (with very limited functions of cource)
- No automaticly date format transition built-in.
# all_usages.py import asyncio import cx_Oracle_async async def main(): loop = asyncio.get_running_loop() oracle_pool = await cx_Oracle_async.create_pool( host='localhost', port='1521', user='user', password='password', db='orcl', loop=loop, autocommit=False, # this option has no use. minsize = 2, maxsize = 4, ) async with oracle_pool.acquire() as connection: async with connection.cursor() as cursor: # single fetch sql_1 = "SELECT * FROM SCOTT.DEPT WHERE deptno = :a" await cursor.execute(sql_1 , (10 , )) print(await cursor.fetchone()) # multiple inert sql_2 = "INSERT INTO SCOTT.DEPT(deptno , dname) VALUES (:a , :b)" sql_2_data = [ [60 , "Hello"], [70 , "World"], ] await cursor.executemany(sql_2 , sql_2_data) await connection.commit() # multiple fetch sql_3 = "SELECT * FROM SCOTT.DEPT WHERE deptno >= :a" await cursor.execute(sql_3 , (60 , )) print(await cursor.fetchall()) if __name__ == '__main__': asyncio.run(main())