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
Растровый объект.