A very simple asynchronous wrapper that allows you to get access to the Oracle database in asyncio programs. - GoodManWEN/cx_Oracle_async
Project description
cx_Oracle_async
A very simple asynchronous wrapper that allows you to get access to the Oracle database in asyncio programs.
Easy to use , buy may not the best practice for efficiency concern.
Requirements
- 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.2.0
Install
pip install cx_Oracle_async
Usage
- Nearly all the same as aiomysql in asynchronous operational approach , with limited cx_Oracle feature support.
- No automaticly date format transition built-in.
- AQ feature added , check docs here for further information.
- You can modify some of the connection properties simply like you're using cx_Oracle.
- You can do basic insert / select / delete etc.
- If you're connecting to database which is on a different machine from python process , you need to install oracle client module in order to use this library. Check cx-Oracle's installation guide for further information.
Performance
query type | asynchronous multithreading | synchronous multithreading | synchronous single thread |
---|---|---|---|
fast single line query | 6259.80 q/s | 28906.93 q/s | 14805.61 q/s |
single line insertion | 1341.88 q/s | 1898 q/s | 1685.17 q/s |
/* Test platform: */
AMD Ryzen 3700x
Windows 10 LTSC
Oracle 19c
You can find performance test codes here.
Examples
Before running examples , make sure you've already installed a oracle client on your machine.
# basic_usages.py
import asyncio
import cx_Oracle_async
async def main():
oracle_pool = await cx_Oracle_async.create_pool(
host='localhost',
port='1521',
user='user',
password='password',
service_name='orcl',
min = 2,
max = 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())
await oracle_pool.close()
if __name__ == '__main__':
asyncio.run(main())
Or you can connect to database via dsn style:
# makedsn.py
import asyncio
import cx_Oracle_async
async def main():
# same api as cx_Oracle.makedsn with 4 limited parameters(host , port , sid , service_name).
dsn = cx_Oracle_async.makedsn(host = 'localhost' , port = '1521' , service_name = 'orcl')
async with cx_Oracle_async.create_pool(user='', password='',dsn = dsn) as pool:
...
asyncio.run(main())
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
cx_Oracle_async-0.2.3.tar.gz
(7.8 kB
view hashes)
Built Distribution
Close
Hashes for cx_Oracle_async-0.2.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6cc64d03963381032d9be8b6ddede33a60ba75bf86bd6a731c0bebce1353b3e1 |
|
MD5 | 6df70c2419377f51885a3f72ce8e9487 |
|
BLAKE2b-256 | ab38b2db01628bf4c214d1f98661fe5e82b76f1fccd39c4ede0bc3fa59f635cb |