Skip to content

Instantly share code, notes, and snippets.

@prokaktus
Created November 1, 2019 12:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save prokaktus/971c3484878c888828ef4c19fed22891 to your computer and use it in GitHub Desktop.
Save prokaktus/971c3484878c888828ef4c19fed22891 to your computer and use it in GitHub Desktop.
asyncpgsa vs raw query
from os import getenv
import asyncio
import aiopg
import aiopg.sa
import asyncpg
import asyncpgsa
import sqlalchemy as sa
pg_tables = sa.Table(
'pg_tables', sa.MetaData(),
sa.Column('schemaname'),
sa.Column('tablename'),
sa.Column('tableowner'),
sa.Column('tablespace'),
sa.Column('hasindexes')
)
query = pg_tables.select().where(pg_tables.c.schemaname == 'pg_catalog')
loop = asyncio.get_event_loop()
DB_USER = getenv("DB_USER")
async def aio_coro():
await connection.execute(query)
async def apg_coro():
await pgconn.execute(query)
async def raw_coro():
await rawpgconn.execute("select schemaname, tablename, tableowner, \
tablespace, hasindexes from pg_tables where schemaname = 'pg_catalog'")
run_aiopg = lambda: loop.run_until_complete(aio_coro())
run_asyncpgsa = lambda: loop.run_until_complete(apg_coro())
run_raw = lambda: loop.run_until_complete(raw_coro())
rawpgconn = asyncpg.connect(user=DB_USER, host='127.0.0.1', database='postgres')
rawpgconn = loop.run_until_complete(rawpgconn)
pgconn = asyncpg.connect(user=DB_USER, host='127.0.0.1', database='postgres', connection_class=asyncpgsa.connection.SAConnection)
pgconn = loop.run_until_complete(pgconn)
engine = loop.run_until_complete(aiopg.sa.create_engine(user=DB_USER, host='127.0.0.1', database='postgres'))
connection = loop.run_until_complete(engine.acquire())
run_asyncpgsa()
run_aiopg()
run_raw()
from timeit import timeit
print('raw', timeit(run_raw, number=10000))
print('aiopg.sa:', timeit(run_aiopg, number=10000))
print('asyncpgsa', timeit(run_asyncpgsa, number=10000))
@prokaktus
Copy link
Author

Results example:

raw 6.719434757
aiopg.sa: 8.542597448
asyncpgsa 7.121963994

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment