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