Открытие/Создание
Открытие и создание объектов данных 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)
При открытии таблиц из СУБД задаются как параметры подключения, так и требуемая таблица или текст запроса.
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)
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)
Если и этот способ не подходит для решения какой-то задачи, можно создавать объекты данных из словаря. Это самый сложный и непрактичный способ.