На конференции EuroPython 2016 Юрий Селиванов (автор async/await-синтаксиса и автор uvloop) представил новую высокопроизводительную библиотеку для асинхронного доступа к PostgreSQL — asyncpg. Тесты демонстрируют в среднем в два раза большую скорость, чем у psycopg2 (и её асинхронного варианта — aiopg).

Причина высоких показателей в том, что asyncpg реализует бинарный протокол PostgreSQL нативно, без использования абстракций, вроде DB-API. Кроме того, это позволило получить простую в использовании реализацию:
asyncpg доступна на PyPI. Используйте для установки pip:
P. S. Некоторые термины, такие как «prepared statement», я оставил без перевода, а также взял на себя смелость использовать в тексте англицизмы, так как считаю, что дотошный перевод технических текстов может искажать изначальный смысл или затруднять его понимание. Прошу меня за это простить.

Причина высоких показателей в том, что asyncpg реализует бинарный протокол PostgreSQL нативно, без использования абстракций, вроде DB-API. Кроме того, это позволило получить простую в использовании реализацию:
- prepared statements
- scrollable cursors
- partial iteration результатов запроса
- автоматического кодирования и декодирования составных типов, массивов и их сочетания
- интуитивно понятной поддержки пользовательских типов
Установка
asyncpg доступна на PyPI. Используйте для установки pip:
$ pip install asyncpg
Пример использования
import asyncio import asyncpg async def run(): conn = await asyncpg.connect(user='user', password='password', database='database', host='127.0.0.1') values = await conn.fetch('''SELECT * FROM mytable''') await conn.close() loop = asyncio.get_event_loop() loop.run_until_complete(run())
P. S. Некоторые термины, такие как «prepared statement», я оставил без перевода, а также взял на себя смелость использовать в тексте англицизмы, так как считаю, что дотошный перевод технических текстов может искажать изначальный смысл или затруднять его понимание. Прошу меня за это простить.
