aiosqlite:用于 AsyncIO 的 Sqlite
.. image:: https://readthedocs.org/projects/aiosqlite/badge/?version=latest :target: https://aiosqlite.omnilib.dev/en/latest/?badge=latest :alt: 文档状态 .. image:: https://img.shields.io/pypi/v/aiosqlite.svg :target: https://pypi.org/project/aiosqlite :alt: PyPI 发布 .. image:: https://img.shields.io/badge/change-log-blue :target: https://github.com/omnilib/aiosqlite/blob/master/CHANGELOG.md :alt: 更新日志 .. image:: https://img.shields.io/pypi/l/aiosqlite.svg :target: https://github.com/omnilib/aiosqlite/blob/master/LICENSE :alt: MIT 许可
aiosqlite 为 sqlite 数据库提供了一个友好的异步接口。
它复制了标准的 sqlite3
模块,但所有标准连接和游标方法都有异步版本,并提供上下文管理器来自动关闭连接和游标:
.. code-block:: python
async with aiosqlite.connect(...) as db:
await db.execute("INSERT INTO some_table ...")
await db.commit()
async with db.execute("SELECT * FROM some_table") as cursor:
async for row in cursor:
...
它也可以以传统的过程方式使用:
.. code-block:: python
db = await aiosqlite.connect(...)
cursor = await db.execute('SELECT * FROM some_table')
row = await cursor.fetchone()
rows = await cursor.fetchall()
await cursor.close()
await db.close()
aiosqlite 还复制了 sqlite3
的大多数高级功能:
.. code-block:: python
async with aiosqlite.connect(...) as db:
db.row_factory = aiosqlite.Row
async with db.execute('SELECT * FROM some_table') as cursor:
async for row in cursor:
value = row['column']
await db.execute('INSERT INTO foo some_table')
assert db.total_changes > 0
安装
aiosqlite 兼容 Python 3.8 及更高版本。 你可以从 PyPI 安装它:
.. code-block:: console
$ pip install aiosqlite
详细信息
aiosqlite 允许在主 AsyncIO 事件循环上与 SQLite 数据库交互,而无需在等待查询或数据获取时阻塞其他协程的执行。它通过为每个连接使用单个共享线程来实现这一点。该线程在共享请求队列中执行所有操作,以防止重叠操作。
连接对象是真实连接的代理,包含共享执行线程,并提供上下文管理器来自动关闭连接。游标同样是真实游标的代理,并为查询结果提供异步迭代器。
许可证
aiosqlite 的版权归 Amethyst Reese <https://noswap.com>
_ 所有,并在 MIT 许可下发布。我在此存储库中向您提供的代码采用开源许可。这是我的个人存储库;您获得的我的代码许可是由我个人授予的,而不是由我的雇主授予的。有关详细信息,请参阅 LICENSE
_ 文件。
.. _LICENSE: https://github.com/omnilib/aiosqlite/blob/master/LICENSE