Открытие/Создание

Открытие и создание объектов данных axipy.DataObject выполняется провайдерами данных. Класс axipy.ProviderManager представляет коллекцию зарегистрированных провайдеров данных.

Открытие

Самый простой способ открыть объект данных из файла - использовать функцию axipy.ProviderManager.openfile. Функция сама найдет подходящий провайдер данных для открытия.

Совет

Это предпочтительный способ.

Пример открытия
# filepath = 'path/to/file.tab'
table = provider_manager.openfile(filepath)

Примечание

При открытии данных они попадают в единый каталог axipy.DataManager.

При необходимости указать больше параметров для открытия, или если параметры по умолчанию не подходят, можно явно использовать провайдер данных. Необходимый провайдер данных можно получить из коллекции зарегистрированных провайдеров данных axipy.ProviderManager.

Пример открытия конкретным провайдером
# csv_filepath = 'path/to/file.csv'
csv_table = provider_manager.csv.open(csv_filepath, delimiter='\t')

Самый сложный способ - открытие через словарь dict. Здесь нужно заранее знать все параметры, их допустимые значения и идентификатор провайдера данных.

Пример открытия из словаря
"""
Открывает csv файл через определение ``definition``.
Исключительно в качестве примера. Открывать csv проще провайдером.
"""
# csv_filepath = 'path/to/file.csv'
definition = {
    'src': csv_filepath,
    'delimiter': '\t',
    'charset': 'utf8',
    'hasNamesRow': True,
    'provider': 'CsvDataProvider'
}
csv_table = provider_manager.open(definition)

При открытии таблиц из СУБД задаются как параметры подключения, так и требуемая таблица или текст запроса.

Пример открытия данный из БД Postgres с указанием имени таблицы.
definition = provider_manager.postgre.get_source(
    host='192.168.0.2',
    db_name='test',
    user='test',
    password='pass',
    dataobject='world'
)
table = provider_manager.open(definition)
Пример открытия данный из БД oracle с указанием текста SQL запроса.
definition = provider_manager.oracle.get_source(
    host='192.168.0.2',
    db_name='ORCL',
    user='test',
    password='pass',
    sql='select * from world'
)
table = provider_manager.open(definition)

Если источник содержит в себе несколько объектов данных, то этот список можно получить посредством метода axipy.ProviderManager.read_contents():

# Запросим перечень таблиц
definition = {'src':'sample.gpkg'}
print(provider_manager.read_contents(definition))
>>> ['table1', 'table2', 'table3']

Далее подставляем имя нужной таблицы и открываем объект данных.

# Откроем нужную таблицу
definition = {'src':'sample.gpkg', 'dataobject':'table1'}
table = provider_manager.open(definition)

Создание

Аналогично, самый простой способ создания файлов - с помощью функции axipy.ProviderManager.createfile:

Пример создания
# filepath = 'path/to/file.tab'
schema = Schema(
    Attribute.string('country', 30),
    Attribute.string('capital', 30),
    coordsystem='prj:Earth Projection 1, 104'
)
table = provider_manager.createfile(filepath, schema)

Примечание

При создании объекта данных он автоматически открывается.

Для задания дополнительных параметров или использования специализированных возможностей провайдера данных, можно явно вызывать методы конкретного провайдера.

Пример создания конкретным провайдером
schema = Schema(
    Attribute.string('country', 30),
    Attribute.string('capital', 30),
)
temp_table = provider_manager.shp.open_temporary(schema)

Если и этот способ не подходит для решения какой-то задачи, можно создавать объекты данных из словаря. Это самый сложный и непрактичный способ.