Nominatim/docs/library/Low-Level-DB-Access.md
2023-08-29 12:14:44 +02:00

1.8 KiB

Low-level connections

The NominatimAPIAsync class allows to directly access the underlying database connection to explore the raw data. Nominatim uses SQLAlchemy for building queries. Please refer to the documentation of the library to understand how to write SQL.

To get access to a search connection, use the begin() function of your API object. This returns a SearchConnection object described below wrapped in a context manager. Its t property has definitions for all Nominatim search tables. For an overview of available tables, refer to the Development Layout in in the development chapter. Note that only tables that are needed for search are accessible as SQLAlchemy tables.

!!! warning The database layout is not part of the API definition and may change without notice. If you play with the low-level access functions, you need to be prepared for such changes.

Here is a simple example, which prints how many places are available in the placex table:

import asyncio
from pathlib import Path
import sqlalchemy as sa
from nominatim.api import NominatimAPIAsync

async def print_table_size():
    api = NominatimAPIAsync(Path('.'))

    async with api.begin() as conn:
        cnt = await conn.scalar(sa.select(sa.func.count()).select_from(conn.t.placex))
        print(f'placex table has {cnt} rows.')

asyncio.run(print_table_size())

!!! warning Low-level connections may only be used to read data from the database. Do not use it to add or modify data or you might break Nominatim's normal functions.

SearchConnection class

::: nominatim.api.SearchConnection options: members: - scalar - execute - get_class_table - get_db_property - get_property heading_level: 6