axipy.da¶
Модуль источников данных.
В данном модуле содержатся классы и методы для работы с источниками данных.
Объект открытия/создания данных - DataProviders¶
-
class
axipy.da.DataProviders¶ Класс открытия/создания объектов данных.
Примечание
Используйте готовый экземпляр этого класса
axipy.ioПримечание
Для удобного задания параметров используйте экземпляры провайдеров:
tab,shp,csv,mif,excel,sqlite,postgre,oracle.Примечание
Открытые данные автоматически попадают в хранилище данных
axipy.da.DataCatalog.Пример:
table = axipy.io.openfile('../path/to/datadir/table.tab')
-
create(definition)¶ Создает и открывает данные из описания.
- Параметры
definition (
dict) – Описание объекта данных.
Псевдоним
create_open().- Тип результата
-
create_open(definition)¶ Создает и открывает данные из описания.
- Возможные параметры:
src- Строка, определяющая местоположение источника данных. Это может быть либо путь к файлу с расширением TAB, либо пустая строка (для таблицы, размещаемой в памяти).schema- Схема таблицы. Задается массивом объектов, содержащих атрибуты.
- Параметры
definition (
dict) – Описание объекта данных.
Пример:
definition = { 'src': '../path/to/datadir/edit/table.tab', 'schema': attr.schema( attr.string('field1'), attr.integer('field2'), ), } table = io.create(definition)
- Тип результата
-
createfile(filepath, schema, *args, **kwargs)¶ Создает таблицу.
create()выполняет ту же функцию, но в более обобщенном виде.- Параметры
filepath (
str) – Путь к создаваемой таблице.schema – Схема таблицы.
- Тип результата
-
property
csv¶ Файловый провайдер - Текст с разделителями.
- Тип результата
-
property
excel¶ Провайдер чтения файлов Excel.
- Тип результата
-
loaded_providers()¶ Возвращает список всех загруженных провайдеров данных.
- Тип результата
- Результат
Провайдеры в виде пар
(Идентификатор : Описание).
-
property
mif¶ Провайдер данных MIF-MID.
- Тип результата
-
open(definition)¶ Открывает данные по описанию.
Формат описания объектов данных индивидуален для каждого провайдера данных, однако многие элементы используются для всех провайдеров данных.
- Параметры
definition (
dict) – Описание объекта данных.
Пример:
# Пример открытия GPKG файла:: definition = { 'src': '../path/to/datadir/example.gpkg', 'dataobject': 'tablename', 'provider': 'SqliteDataProvider' } table = io.open(definition)
Пример открытия таблицы базы данных:
definition = {"src": "localhost", "db": "sample", "user": "postgres", "password": "postgres", "dataobject": "public.world", "provider": "PgDataProvider"} table = io.open(definition)
- Тип результата
-
openfile(filepath, *args, **kwargs)¶ Открывает данные из файла.
- Параметры
filepath (
str) – Путь к открываемому файлу.**kwargs – Именованные аргументы.
Пример:
table = io.openfile('../path/to/datadir/example.gpkg')
- Тип результата
-
property
oracle¶ PostgreSQL.
- Тип результата
-
property
postgre¶ PostgreSQL.
- Тип результата
-
query(query_text, *tables)¶ Выполняет SQL-запрос к перечисленным таблицам.
Предупреждение
Используйте
axipy.da.DataCatalog.query().- Параметры
query_text (
str) – Текст запроса.*tables – Список таблиц, к которым выполняется запрос.
- Тип результата
- Результат
Таблица, если результатом запроса является таблица.
Пример:
query_text = "SELECT * FROM world, caps WHERE world.capital = caps.capital" joined = io.query(query_text, world, caps)
-
read_contents(definition)¶ Читает содержимое источника данных.
Обычно используется для источников, способных содержать несколько объектов данных.
- Параметры
- Тип результата
- Результат
Имена объектов данных.
Пример:
>>> io.read_contents('../path/to/datadir/example.gpkg') ['world', 'worldcap'] >>> world = io.openfile('../path/to/datadir/example.gpkg', ... dataobject='world')
-
property
shp¶ Векторный провайдер OGR.
- Тип результата
-
property
sqlite¶ Векторный провайдер sqlite.
- Тип результата
-
property
tab¶ Провайдер MapInfo.
- Тип результата
-
-
class
axipy.da.Source(*args)¶ Источник данных.
Используется для открытия данных или для указания источника при конвертации.
Пример открытия:
table = source.open()
Пример конвертации:
destination.export_from(source)
Примечание
Не все провайдеры поддерживают открытие и конвертацию. См. описание конкретного провайдера данных.
-
open()¶ Открывает источник данных.
- Тип результата
-
-
class
axipy.da.Destination(schema, *args)¶ Назначение объекта данных.
Используется для создания данных или для указания назначения при конвертации.
Пример создания:
table = destination.create_open()
Пример конвертации:
destination.export_from(source)
Примечание
Не все провайдеры поддерживают создание и конвертацию. См. описание конкретного провайдера данных.
-
create_open()¶ Создает и открывает объект данных.
- Тип результата
-
export(features)¶ Создает объект данных и экспортирует в него записи.
-
export_from(source, copy_schema=False)¶ Создает объект данных и экспортирует в него записи из источника данных.
-
-
class
axipy.da.DataProvider(info)¶ Абстрактный провайдер данных.
-
create(*args, **kwargs)¶ Создает и открывает источник данных.
Псевдоним
create_open().
-
create_open(*args, **kwargs)¶ Создает и открывает источник данных.
Пример:
provider.create_open(...)
Что эквивалентно:
provider.get_destiantion(...).create_open()
См.также
DataProvider.destination().
-
file_extensions()¶ Список поддерживаемых расширений файлов.
-
get_destination()¶ Создает назначение объекта данных.
- Исключение
NoteImplementedError – Если провайдер не поддерживает создание назначений.
- Тип результата
-
get_source()¶ Создает источник данных.
- Исключение
NoteImplementedError – Если провайдер не поддерживает создание источников.
- Тип результата
-
open(*args, **kwargs)¶ Открывает источник данных.
Пример:
provider.open(...)
Что эквивалентно:
provider.get_source(...).open()
См.также
DataProvider.source().
-
-
class
axipy.da.CsvDataProvider(info)¶ Файловый провайдер: Текст с разделителями.
-
get_destination(filepath, schema, with_header=True, delimiter=',', encoding='utf8')¶ Создает назначение объекта данных.
-
get_source(filepath, with_header=True, delimiter=',', encoding='utf8')¶ Создает источник данных.
-
-
class
axipy.da.ExcelDataProvider(info)¶ Провайдер чтения файлов Excel.
-
get_destination()¶ Внимание
Не поддерживается.
- Тип результата
-
-
class
axipy.da.MifMidDataProvider(info)¶ Провайдер данных MIF-MID.
-
convert_to_tab(mif_filepath, tab_filepath)¶ Конвертирует из MIF в TAB.
-
get_destination(filepath, schema)¶ Создает назначение объекта данных.
- Параметры
- Тип результата
-
-
class
axipy.da.ShapeDataProvider(info)¶ -
get_destination(filepath, schema, encoding='utf8')¶ Создает назначение объекта данных.
- Параметры
- Тип результата
-
get_source(filepath, encoding='utf8')¶ Создает источник данных.
-
-
class
axipy.da.SqliteDataProvider(info)¶ Векторный провайдер sqlite.
-
get_destination()¶ Внимание
Не поддерживается.
- Тип результата
-
-
class
axipy.da.TabDataProvider(info)¶ Провайдер MapInfo.
-
get_destination(filepath, schema)¶ Создает назначение объекта данных.
- Параметры
- Тип результата
-
-
class
axipy.da.PostgreDataProvider(info)¶ PostgreSQL.
-
get_destination(schema, dataobject, db_name, host, user, password, port=5432)¶ Создает назначение объекта данных.
-
Каталог данных - DataCatalog¶
-
class
axipy.da.DataCatalog¶ Хранилище объектов данных.
Примечание
Используйте готовый экземпляр этого класса
axipy.app.MainWindow.catalog.-
add(data_object)¶ Добавляет объект данных в хранилище.
- Параметры
data_object (
DataObject) – Объект данных для добавления.
-
property
added¶ Signal[str]Сигнал о добавлении объекта.- Тип результата
Signal
-
find(name)¶ Производит поиск объект данных по имени.
- Параметры
name (
str) – Имя объекта данных.- Тип результата
- Результат
Искомый объект данных или None.
-
objects()¶ Возвращает список объектов.
- Тип результата
-
query(query_text)¶ Выполняет SQL-запрос к перечисленным таблицам.
- Параметры
query_text (
str) – Текст запроса.- Тип результата
- Результат
Таблица, если результатом запроса является таблица.
Пример:
query_text = "SELECT * FROM world, caps WHERE world.capital = caps.capital" joined = catalog.query(query_text)
-
remove(data_object)¶ Удаляет объект данных.
Объект данных при этом закрывается.
- Параметры
data_object (
DataObject) – Объект данных для удаления.
-
remove_all()¶ Удаляет все объекты данных.
-
property
removed¶ Signal[str]Сигнал об удалении объекта.- Тип результата
Signal
-
property
updated¶ Signal[]Сигнал об изменении количества объектов.- Тип результата
Signal
-
Объект данных - DataObject¶
digraph geometry {
node [shape="box", style=filled, fillcolor="lightgray"]
DataObject [ href="#ref-label-dataobject-class" ];
Table [ href="#ref-label-table-class" ];
Raster [ href="#ref-label-raster-class" ];
DataObject -> Table;
DataObject -> Raster;
}-
class
axipy.da.DataObject¶ Объект данных.
Открываемые объекты из источников данных представляются объектами этого типа. Возможные реализации: таблица, растр, грид, чертеж, панорама, и так далее.
Пример:
table = io.openfile('path/to/file.tab') ... table.close() # Закрывает таблицу
Для закрытия объекта данных можно использовать менеджер контекста - выражение
with. См.close().Пример:
with io.openfile('path/to/file.tab') as raster: ... # При выходе из блока растр будет закрыт
-
close()¶ Пытается закрыть таблицу.
- Исключение
RuntimeError – Ошибка закрытия таблицы.
Примечание
Объект данных не всегда может быть сразу закрыт. Например, для таблиц используется транзакционная модель редактирования и перед закрытием необходимо сохранить или отменить изменения, если они есть. См.
Table.is_modified.
-
Таблица - Table¶
-
class
axipy.da.Table¶ Базовые классы:
axipy.da.DataObjectТаблица.
Менеджер контекста сохраняет изменения и закрывает таблицу.
Пример:
with io.openfile('path/to/file.tab') as table: ... # При выходе из блока таблица будет сохранена и закрыта
См.также
-
commit()¶ Сохраняет изменения в таблице.
Если таблица не содержит несохраненные изменения, то команда игнорируется.
- Исключение
RuntimeError – Невозможно сохранить изменения.
-
property
coordsystem¶ Система координат таблицы.
- Тип результата
-
count(bbox=None)¶ Возвращает количество записей, удовлетворяющих параметрам.
Данный метод является наиболее предпочтительным для оценки количества записей. При этом используется наиболее оптимальный вариант выполнения запроса для каждого конкретного провайдера данных.
-
insert(features)¶ Вставляет записи в таблицу.
-
items(bbox=None, ids=None)¶ Запрашивает записи, удовлетворяющие параметрам. В качестве фильтра может быть указан либо ограничивающий прямоугольник, либо перечень идентификаторов в виде списка.
-
itemsByIds(ids)¶ Запрашивает записи по списку
listс идентификаторами записей, либо перечень идентификаторов в виде списка.- Параметры
- Тип результата
- Результат
Итератор по записям.
Пример запроса по прямоугольнику (таблица в проекции Робинсона):
table_world = io.openfile('world.tab') items = table_world.itemsByIds([11,27,41,163,203]) for f in items: print('Feature id={}. Страна={}'.format(f.id, f['Страна']))
-
itemsInObject(obj)¶ Запрашивает записи с фильтром по геометрическому объекту.
- Параметры
obj (
Geometry) – Геометрия. Если для нее не задана СК, используется СК таблицы.- Тип результата
- Результат
Итератор по записям.
Пример запроса по полигону:
table_world = io.openfile('world.tab') v = 2000000 polygon = Polygon((-v, -v), (-v, v), (v, v), (v, -v)) items = table_world.itemsInObject(polygon) for f in items: print('Feature id={}. Страна={}'.format(f.id, f['Страна']))
-
itemsInRect(bbox)¶ Запрашивает записи с фильтром по ограничивающему прямоугольнику.
- Параметры
bbox (
Union[Rect,QRectF,tuple]) – Ограничивающий прямоугольник.- Тип результата
- Результат
Итератор по записям.
Пример запроса (таблица в проекции Робинсона):
table_world = io.openfile('world.tab') v = 2000000 items = table_world.itemsInRect(Rect(-v, -v, v, v)) for f in items: print('Feature id={}. Страна={}'.format(f.id, f['Страна']))
-
remove(ids)¶ Удаляет записи из таблицы.
-
restore()¶ Отменяет несохраненные изменения в таблице.
Если таблица не содержит несохраненные изменения, то команда игнорируется.
-
update(features)¶ Обновляет записи в таблице.
При обновлении проверяется
Feature.id. Если запись с таким идентификатором не найдена, то она пропускается.Пример использования¶modified_feature = Feature({'attr_name': 'new_value'}, id=1) table.update(modified_feature) table.commit()
См.также
-
Атрибут записи - Attribute¶
-
class
axipy.da.Attribute(name, typedef)¶ Атрибут схемы таблицы.
Используется для создания и инспектирования атрибутов и схем.
Совет
Для создания атрибутов используйте функции класса
axipy.da.AttributeFactory:axipy.da.AttributeFactory.string(),axipy.da.AttributeFactory.decimal()и другие.См.также
Схема таблицы - Schema¶
-
class
axipy.da.Schema(*attributes, coordsystem=None)¶ Схема таблицы. Представляет собой список атрибутов. Организован в виде
listи свойством coordsystem. При задании coordsystem соответственно создается геометрический атрибут.- Параметры
coordsystem (
Union[str,CoordSystem,None]) – Система координат для геометрического атрибута. Может быть задана или в виде строки (подробнееaxipy.cs.CoordSystem.from_string()) или как объект СК.
Имеет стандартные функции работы со списком.
Пример использования¶1 2 3 4 5 6 7 8 9
count = len(schema) # количество атрибутов attribute = schema[2] # читает schema[2] = attr.string('attr', 30) # изменяет del schema[2] # удаляет schema.append(attr.string('new_attr')) # добавляет в конец schema.insert(2, attr.integer('num_attr')) # добавляет по индексу index = schema.index('new_attr') # ищет по имени assert 'new_attr' in schema # проверяет существование schema.remove('new_attr') # удаляет по имени
См.также
-
property
coordsystem¶ Система координат.
- Тип результата
- Результат
None, если СК отсутствует.
См.также
Пример использования¶1 2 3 4 5
if schema.coordsystem is not None: # проверяет существование pass crs_string = schema.coordsystem # получает schema.coordsystem = 'epsg:4326' # изменяет schema.coordsystem = None # удаляет
Фабрика атрибутов - AttributeFactory¶
-
class
axipy.da.AttributeFactory¶ Фабричный класс создания атрибутов и схем таблиц.
Пример создания атрибута:
string_attr = attr.string('attr_name', 80)
Пример создания схемы:
schema = attr.schema( attr.string('column_1'), attr.integer('column_2'), coordsystem='prj:Earth Projection 12, 62, "m", 0' )
Примечание
Используйте более короткий псевдоним этого класса
axipy.da.attr.См.также
-
static
bool(name)¶ Создает атрибут логического типа.
-
static
date(name)¶ Создает атрибут типа дата.
-
static
datetime(name)¶ Создает атрибут типа дата и время.
-
static
decimal(name, length=10, precision=5)¶ Создает атрибут десятичного типа.
-
static
double(name)¶ Создает атрибут вещественного типа.
-
static
integer(name)¶ Создает атрибут целого типа.
-
static
schema(*attributes, coordsystem=None)¶ Создает схему из списка атрибутов.
- Параметры
- Тип результата
- Результат
Новая схема.
См.также
-
static
string(name, length=80)¶ Создает атрибут строкового типа.
-
static
Запись в таблице - Feature¶
-
class
axipy.da.Feature(properties={}, geometry=None, style=None, id=None, **kwargs)¶ Запись в таблице.
Работа с записью похожа на работу со словарем
dict. Но также допускает обращение по индексу.Количество атрибутов:
count = len(feature)
Запись значения:
feature['my_attr_name'] = 'new_value' # по ключу feature[0] = 'another_value' # по индексу
Чтение значения:
value = feature['my_attr_name'] # по ключу another_value = feature[0] # по индексу
Проверка наличия атрибута:
'my_attr_name' in feature # по ключу 5 in feature # по индексу
Значения атрибутов можно задать словарем или именованными аргументами.
Например:
feature = Feature({'name1': 'value1', 'name2': 'value2'}) # эквивалентно feature = Feature(name1='value1', name2='value2')
- Параметры
-
property
geometry¶ Геометрия записи.
Например:
point = feature.geometry # ... feature.geometry = new_point
См.также
Feature.has_geometry(),GEOMETRY_ATTR
-
get(key, default=None)¶ Возвращает значение заданного атрибута.
-
property
id¶ Идентификатор записи в таблице.
Несохраненные записи в таблице будут иметь отрицательное значение.
См.также
- Тип результата
- Результат
0 если идентификатор не задан.
-
items()¶ Возвращает список пар имя - значение.
Например:
for key, value in feature.items(): pass
-
property
style¶ Стиль записи.
Например:
style = feature.style # ... feature.style = style
См.также
Feature.has_style(),STYLE_ATTR
Растр - Raster¶
-
class
axipy.da.Raster¶ Базовые классы:
axipy.da.DataObjectРастровый объект.