ptvp35/docs/source/usage.rst
2023-01-13 15:33:04 +00:00

76 lines
2.7 KiB
ReStructuredText

Usage
=====
Installation
------------
Default installation option is to use pip+git
.. code-block:: console
(venv) $ pip install git+https://gitea.parrrate.ru/PTV/ptvp35.git
Basic functionality
-------------------
:class:`ptvp35.DbFactory` class provides context management for database connections (:class:`ptvp35.DbConnection`) via :code:`async with` statement.
The connection isn't just a "connection", it's also the MMDB itself, so **using two connections to one database is an undefined behaviour**.
Also, that means that each connection start/shutdown is quite time expensive.
These two facts together tell that, if you intend on using the connection, you should probably wrap the main program in an :code:`async with` block.
.. code-block:: python3
import pathlib
from ptvp35 import *
async def main():
async with DbFactory(pathlib.Path('example.db'), kvfactory=KVJson()) as connection:
await _main(connection)
Different ways to get/set a value:
.. code-block:: python3
from ptvp35 import *
async def _main(connection: DbConnection):
value0 = connection.get('increment-0', 0)
await connection.set('increment-0', value0 + 1)
value1 = connection.get('increment-1', 0)
connection.set_nowait('increment-1', value1 + 1)
await connection.commit()
async with connection.transaction() as transaction:
value2 = transaction.get('increment-2', 0)
transaction.set_nowait('increment-2', value2 + 1)
async with connection.transaction() as transaction:
value3 = transaction.get('increment-3', 0)
transaction.set_nowait('increment-3', value3 + 1)
await transaction.commit()
with connection.transaction() as transaction:
value4 = transaction.get('increment-4', 0)
transaction.set_nowait('increment-4', value4 + 1)
await transaction.commit()
with connection.transaction() as transaction:
value5 = transaction.get('increment-5', 0)
transaction.set_nowait('increment-5', value5 + 1)
await connection.commit()
* :meth:`ptvp35.DbConnection.get`
this method is instant.
* :meth:`ptvp35.DbConnection.set`
this method may take time to run.
ordering may not be guaranteed (depends on event loop implementation).
* :meth:`ptvp35.DbConnection.set_nowait`
this method is instant.
ordering is guaranteed.
* :meth:`ptvp35.DbConnection.commit`
this method may take time to run.
respects the ordering of previously called :code:`set_nowait` methods.
will, depending on event loop implementation, also execute later changes.
* :meth:`ptvp35.DbConnection.transaction`