Project: aiopg

Postgres integration with asyncio.

Project Details

Latest version
1.4.0
Home Page
https://aiopg.readthedocs.io
PyPI Page
https://pypi.org/project/aiopg/

Project Popularity

PageRank
0.00255941460237941
Number of downloads
215807

aiopg

.. image:: https://github.com/aio-libs/aiopg/workflows/CI/badge.svg :target: https://github.com/aio-libs/aiopg/actions?query=workflow%3ACI .. image:: https://codecov.io/gh/aio-libs/aiopg/branch/master/graph/badge.svg :target: https://codecov.io/gh/aio-libs/aiopg .. image:: https://badges.gitter.im/Join%20Chat.svg :target: https://gitter.im/aio-libs/Lobby :alt: Chat on Gitter

aiopg is a library for accessing a PostgreSQL_ database from the asyncio_ (PEP-3156/tulip) framework. It wraps asynchronous features of the Psycopg database driver.

Example

.. code:: python

import asyncio
import aiopg

dsn = 'dbname=aiopg user=aiopg password=passwd host=127.0.0.1'

async def go():
    pool = await aiopg.create_pool(dsn)
    async with pool.acquire() as conn:
        async with conn.cursor() as cur:
            await cur.execute("SELECT 1")
            ret = []
            async for row in cur:
                ret.append(row)
            assert ret == [(1,)]

loop = asyncio.get_event_loop()
loop.run_until_complete(go())

Example of SQLAlchemy optional integration

.. code:: python

import asyncio from aiopg.sa import create_engine import sqlalchemy as sa

metadata = sa.MetaData()

tbl = sa.Table('tbl', metadata, sa.Column('id', sa.Integer, primary_key=True), sa.Column('val', sa.String(255)))

async def create_table(engine): async with engine.acquire() as conn: await conn.execute('DROP TABLE IF EXISTS tbl') await conn.execute('''CREATE TABLE tbl ( id serial PRIMARY KEY, val varchar(255))''')

async def go(): async with create_engine(user='aiopg', database='aiopg', host='127.0.0.1', password='passwd') as engine:

       async with engine.acquire() as conn:
           await conn.execute(tbl.insert().values(val='abc'))

           async for row in conn.execute(tbl.select()):
               print(row.id, row.val)

loop = asyncio.get_event_loop() loop.run_until_complete(go())

.. _PostgreSQL: http://www.postgresql.org/ .. _asyncio: https://docs.python.org/3/library/asyncio.html

Please use::

$ make test

for executing the project's unittests. See https://aiopg.readthedocs.io/en/stable/contributing.html for details on how to set up your environment to run the tests.

Changelog

1.4.0 (2022-10-26) ^^^^^^^^^^^^^^^^^^

  • Add python 3.11 and drop python 3.6 support #892 <https://github.com/aio-libs/aiopg/pull/892>_

1.3.5 (2022-09-25) ^^^^^^^^^^^^^^^^^^

  • Fix pool size limit check for unlimited pools #888 <https://github.com/aio-libs/aiopg/pull/888>_

1.3.4 (2022-06-30) ^^^^^^^^^^^^^^^^^^

1.3.4b3 (2022-06-29) ^^^^^^^^^^^^^^^^^^^^

1.3.4b2 (2022-06-29) ^^^^^^^^^^^^^^^^^^^^

1.3.4b1 (2022-06-29) ^^^^^^^^^^^^^^^^^^^^

  • Fix compatibility with SA 1.4.38 #891 <https://github.com/aio-libs/aiopg/pull/891>_
  • Add py.typed marker #878 <https://github.com/aio-libs/aiopg/pull/878>_

1.3.3 (2021-11-01) ^^^^^^^^^^^^^^^^^^

  • Support async-timeout 4.0+

1.3.2 (2021-10-07) ^^^^^^^^^^^^^^^^^^

1.3.2b2 (2021-10-07) ^^^^^^^^^^^^^^^^^^^^

  • Respect use_labels for select statement #882 <https://github.com/aio-libs/aiopg/pull/882>_

1.3.2b1 (2021-07-11) ^^^^^^^^^^^^^^^^^^^^

  • Fix compatibility with SQLAlchemy >= 1.4 #870 <https://github.com/aio-libs/aiopg/pull/870>_

1.3.1 (2021-07-08) ^^^^^^^^^^^^^^^^^^

1.3.1b2 (2021-07-06) ^^^^^^^^^^^^^^^^^^^^

  • Suppress "Future exception was never retrieved" #862 <https://github.com/aio-libs/aiopg/pull/862>_

1.3.1b1 (2021-07-05) ^^^^^^^^^^^^^^^^^^^^

  • Fix ClosableQueue.get on cancellation, close it on Connection.close #859 <https://github.com/aio-libs/aiopg/pull/859>_

1.3.0 (2021-06-30) ^^^^^^^^^^^^^^^^^^

1.3.0b4 (2021-06-28) ^^^^^^^^^^^^^^^^^^^^

  • Fix "Unable to detect disconnect when using NOTIFY/LISTEN" #559 <https://github.com/aio-libs/aiopg/pull/559>_

1.3.0b3 (2021-04-03) ^^^^^^^^^^^^^^^^^^^^

  • Reformat using black #814 <https://github.com/aio-libs/aiopg/pull/814>_

1.3.0b2 (2021-04-02) ^^^^^^^^^^^^^^^^^^^^

  • Type annotations #813 <https://github.com/aio-libs/aiopg/pull/813>_

1.3.0b1 (2021-03-30) ^^^^^^^^^^^^^^^^^^^^

  • Raise ResourceClosedError if we try to open a cursor on a closed SAConnection #811 <https://github.com/aio-libs/aiopg/pull/811>_

1.3.0b0 (2021-03-25) ^^^^^^^^^^^^^^^^^^^^

  • Fix compatibility with SA 1.4 for IN statement #806 <https://github.com/aio-libs/aiopg/pull/806>_

1.2.1 (2021-03-23) ^^^^^^^^^^^^^^^^^^

  • Pop loop in connection init due to backward compatibility #808 <https://github.com/aio-libs/aiopg/pull/808>_

1.2.0b4 (2021-03-23) ^^^^^^^^^^^^^^^^^^^^

  • Set max supported sqlalchemy version #805 <https://github.com/aio-libs/aiopg/pull/805>_

1.2.0b3 (2021-03-22) ^^^^^^^^^^^^^^^^^^^^

  • Don't run ROLLBACK when the connection is closed #778 <https://github.com/aio-libs/aiopg/pull/778>_

  • Multiple cursors support #801 <https://github.com/aio-libs/aiopg/pull/801>_

1.2.0b2 (2020-12-21) ^^^^^^^^^^^^^^^^^^^^

  • Fix IsolationLevel.read_committed and introduce IsolationLevel.default #770 <https://github.com/aio-libs/aiopg/pull/770>_

  • Fix python 3.8 warnings in tests #771 <https://github.com/aio-libs/aiopg/pull/771>_

1.2.0b1 (2020-12-16) ^^^^^^^^^^^^^^^^^^^^

  • Deprecate blocking connection.cancel() method #570 <https://github.com/aio-libs/aiopg/pull/570>_

1.2.0b0 (2020-12-15) ^^^^^^^^^^^^^^^^^^^^

  • Implement timeout on acquiring connection from pool #766 <https://github.com/aio-libs/aiopg/pull/766>_

1.1.0 (2020-12-10) ^^^^^^^^^^^^^^^^^^

1.1.0b2 (2020-12-09) ^^^^^^^^^^^^^^^^^^^^

  • Added missing slots to context managers #763 <https://github.com/aio-libs/aiopg/pull/763>_

1.1.0b1 (2020-12-07) ^^^^^^^^^^^^^^^^^^^^

  • Fix on_connect multiple call on acquire #552 <https://github.com/aio-libs/aiopg/pull/552>_

  • Fix python 3.8 warnings #622 <https://github.com/aio-libs/aiopg/pull/642>_

  • Bump minimum psycopg version to 2.8.4 #754 <https://github.com/aio-libs/aiopg/pull/754>_

  • Fix Engine.release method to release connection in any way #756 <https://github.com/aio-libs/aiopg/pull/756>_

1.0.0 (2019-09-20) ^^^^^^^^^^^^^^^^^^

  • Removal of an asynchronous call in favor of issues # 550

  • Big editing of documentation and minor bugs #534

0.16.0 (2019-01-25) ^^^^^^^^^^^^^^^^^^^

  • Fix select priority name #525 <https://github.com/aio-libs/aiopg/issues/525>_

  • Rename psycopg2 to psycopg2-binary to fix deprecation warning #507 <https://github.com/aio-libs/aiopg/issues/507>_

  • Fix #189 <https://github.com/aio-libs/aiopg/issues/189>_ hstore when using ReadDictCursor #512 <https://github.com/aio-libs/aiopg/issues/512>_

  • close cannot be used while an asynchronous query is underway #452 <https://github.com/aio-libs/aiopg/issues/452>_

  • sqlalchemy adapter trx begin allow transaction_mode #498 <https://github.com/aio-libs/aiopg/issues/498>_

0.15.0 (2018-08-14) ^^^^^^^^^^^^^^^^^^^

  • Support Python 3.7 #437 <https://github.com/aio-libs/aiopg/issues/437>_

0.14.0 (2018-05-10) ^^^^^^^^^^^^^^^^^^^

  • Add get_dialect func to have ability to pass json_serializer #451 <https://github.com/aio-libs/aiopg/issues/451>_

0.13.2 (2018-01-03) ^^^^^^^^^^^^^^^^^^^

  • Fixed compatibility with SQLAlchemy 1.2.0 #412 <https://github.com/aio-libs/aiopg/issues/412>_

  • Added support for transaction isolation levels #219 <https://github.com/aio-libs/aiopg/issues/219>_

0.13.1 (2017-09-10) ^^^^^^^^^^^^^^^^^^^

  • Added connection poll recycling logic #373 <https://github.com/aio-libs/aiopg/issues/373>_

0.13.0 (2016-12-02) ^^^^^^^^^^^^^^^^^^^

  • Add async with support to .begin_nested() #208 <https://github.com/aio-libs/aiopg/issues/208>_

  • Fix connection.cancel() #212 <https://github.com/aio-libs/aiopg/issues/212>_ #223 <https://github.com/aio-libs/aiopg/issues/223>_

  • Raise informative error on unexpected connection closing #191 <https://github.com/aio-libs/aiopg/issues/191>_

  • Added support for python types columns issues #217 <https://github.com/aio-libs/aiopg/issues/217>_

  • Added support for default values in SA table issues #206 <https://github.com/aio-libs/aiopg/issues/206>_

0.12.0 (2016-10-09) ^^^^^^^^^^^^^^^^^^^

  • Add an on_connect callback parameter to pool #141 <https://github.com/aio-libs/aiopg/issues/141>_

  • Fixed connection to work under both windows and posix based systems #142 <https://github.com/aio-libs/aiopg/issues/142>_

0.11.0 (2016-09-12) ^^^^^^^^^^^^^^^^^^^

  • Immediately remove callbacks from a closed file descriptor #139 <https://github.com/aio-libs/aiopg/issues/139>_

  • Drop Python 3.3 support

0.10.0 (2016-07-16) ^^^^^^^^^^^^^^^^^^^

  • Refactor tests to use dockerized Postgres server #107 <https://github.com/aio-libs/aiopg/issues/107>_

  • Reduce default pool minsize to 1 #106 <https://github.com/aio-libs/aiopg/issues/106>_

  • Explicitly enumerate packages in setup.py #85 <https://github.com/aio-libs/aiopg/issues/85>_

  • Remove expired connections from pool on acquire #116 <https://github.com/aio-libs/aiopg/issues/116>_

  • Don't crash when Connection is GC'ed #124 <https://github.com/aio-libs/aiopg/issues/124>_

  • Use loop.create_future() if available

0.9.2 (2016-01-31) ^^^^^^^^^^^^^^^^^^

  • Make pool.release return asyncio.Future, so we can wait on it in __aexit__ #102 <https://github.com/aio-libs/aiopg/issues/102>_

  • Add support for uuid type #103 <https://github.com/aio-libs/aiopg/issues/103>_

0.9.1 (2016-01-17) ^^^^^^^^^^^^^^^^^^

  • Documentation update #101 <https://github.com/aio-libs/aiopg/issues/101>_

0.9.0 (2016-01-14) ^^^^^^^^^^^^^^^^^^

  • Add async context managers for transactions #91 <https://github.com/aio-libs/aiopg/issues/91>_

  • Support async iterator in ResultProxy #92 <https://github.com/aio-libs/aiopg/issues/92>_

  • Add async with for engine #90 <https://github.com/aio-libs/aiopg/issues/90>_

0.8.0 (2015-12-31) ^^^^^^^^^^^^^^^^^^

  • Add PostgreSQL notification support #58 <https://github.com/aio-libs/aiopg/issues/58>_

  • Support pools with unlimited size #59 <https://github.com/aio-libs/aiopg/issues/59>_

  • Cancel current DB operation on asyncio timeout #66 <https://github.com/aio-libs/aiopg/issues/66>_

  • Add async with support for Pool, Connection, Cursor #88 <https://github.com/aio-libs/aiopg/issues/88>_

0.7.0 (2015-04-22) ^^^^^^^^^^^^^^^^^^

  • Get rid of resource leak on connection failure.

  • Report ResourceWarning on non-closed connections.

  • Deprecate iteration protocol support in cursor and ResultProxy.

  • Release sa connection to pool on connection.close().

0.6.0 (2015-02-03) ^^^^^^^^^^^^^^^^^^

  • Accept dict, list, tuple, named and positional parameters in SAConnection.execute()

0.5.2 (2014-12-08) ^^^^^^^^^^^^^^^^^^

  • Minor release, fixes a bug that leaves connection in broken state after cursor.execute() failure.

0.5.1 (2014-10-31) ^^^^^^^^^^^^^^^^^^

  • Fix a bug for processing transactions in line.

0.5.0 (2014-10-31) ^^^^^^^^^^^^^^^^^^

  • Add .terminate() to Pool and Engine

  • Reimplement connection pool (now pool size cannot be greater than pool.maxsize)

  • Add .close() and .wait_closed() to Pool and Engine

  • Add minsize, maxsize, size and freesize properties to sa.Engine

  • Support echo parameter for logging executed SQL commands

  • Connection.close() is not a coroutine (but we keep backward compatibility).

0.4.1 (2014-10-02) ^^^^^^^^^^^^^^^^^^

  • make cursor iterable

  • update docs

0.4.0 (2014-10-02) ^^^^^^^^^^^^^^^^^^

  • add timeouts for database operations.

  • Autoregister psycopg2 support for json data type.

  • Support JSON in aiopg.sa

  • Support ARRAY in aiopg.sa

  • Autoregister hstore support if present in connected DB

  • Support HSTORE in aiopg.sa

0.3.2 (2014-07-07) ^^^^^^^^^^^^^^^^^^

  • change signature to cursor.execute(operation, parameters=None) to follow psycopg2 convention.

0.3.1 (2014-07-04) ^^^^^^^^^^^^^^^^^^

  • Forward arguments to cursor constructor for pooled connections.

0.3.0 (2014-06-22) ^^^^^^^^^^^^^^^^^^

  • Allow executing SQLAlchemy DDL statements.

  • Fix bug with race conditions on acquiring/releasing connections from pool.

0.2.3 (2014-06-12) ^^^^^^^^^^^^^^^^^^

  • Fix bug in connection pool.

0.2.2 (2014-06-07) ^^^^^^^^^^^^^^^^^^

  • Fix bug with passing parameters into SAConnection.execute when executing raw SQL expression.

0.2.1 (2014-05-08) ^^^^^^^^^^^^^^^^^^

  • Close connection with invalid transaction status on returning to pool.

0.2.0 (2014-05-04) ^^^^^^^^^^^^^^^^^^

  • Implemented optional support for sqlalchemy functional sql layer.

0.1.0 (2014-04-06) ^^^^^^^^^^^^^^^^^^

  • Implemented plain connections: connect, Connection, Cursor.

  • Implemented database pools: create_pool and Pool.