QueryTable - SQL запрос.

class axipy.QueryTable

Базовые классы: Table

Таблица, построенная на основе SQL запроса.

Пример:

table = provider_manager.openfile('world.tab')
query = data_manager.query('select * from world')

Свойства:

can_redo

Возможен ли откат на один шаг вперед.

can_undo

Возможен ли откат на один шаг назад.

coordsystem

Система координат таблицы.

hotlink

Наименование атрибута таблицы для хранения гиперссылки.

is_editable

Признак того, что таблица является редактируемой.

is_modified

Таблица содержит несохраненные изменения.

is_spatial

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

is_temporary

Признак того, что таблица является временной.

name

Название объекта данных.

properties

Дополнительные свойства объекта данных.

provider

Провайдер изначального источника данных.

schema

Схема таблицы.

sql_text

Текст SQL запроса.

supported_operations

Доступные операции.

Методы:

close()

Пытается закрыть таблицу.

commit()

Сохраняет изменения в таблице.

count([bbox])

Возвращает количество записей, удовлетворяющих параметрам.

get_bounds()

Возвращает область, в которую попадают все данные таблицы.

insert(features)

Вставляет записи в таблицу.

items([bbox, ids])

Запрашивает записи, удовлетворяющие параметрам.

itemsByIds(ids)

Запрашивает записи по списку list с идентификаторами записей, либо перечень идентификаторов в виде списка.

itemsInObject(obj)

Запрашивает записи с фильтром по геометрическому объекту.

itemsInRect(bbox)

Запрашивает записи с фильтром по ограничивающему прямоугольнику.

redo()

Производит откат на один шаг вперед.

remove(ids)

Удаляет записи из таблицы.

rollback()

Отменяет несохраненные изменения в таблице.

undo()

Производит откат на один шаг назад.

update(features)

Обновляет записи в таблице.

Сигналы:

data_changed

Сигнал об изменении данных таблицы.

destroyed

Сигнал оповещения об удалении объекта.

schema_changed

Сигнал об изменении схемы таблицы.

property can_redo: bool

Возможен ли откат на один шаг вперед.

property can_undo: bool

Возможен ли откат на один шаг назад.

close()

Пытается закрыть таблицу.

Исключение:

RuntimeError – Ошибка закрытия таблицы.

Примечание

Объект данных не всегда может быть сразу закрыт. Например, для таблиц используется транзакционная модель редактирования и перед закрытием необходимо сохранить или отменить изменения, если они есть. См. Table.is_modified.

commit()

Сохраняет изменения в таблице.

Если таблица не содержит несохраненные изменения, то команда игнорируется.

Исключение:

RuntimeError – Невозможно сохранить изменения.

property coordsystem: Optional[CoordSystem]

Система координат таблицы.

count(bbox: Optional[Union[Rect, QRectF, tuple]] = None) int

Возвращает количество записей, удовлетворяющих параметрам.

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

Параметры:

bbox – Ограничивающий прямоугольник.

Результат:

Количество записей.

property data_changed: Signal

Сигнал об изменении данных таблицы. Испускается когда были изменены данные таблицы.

Пример подписки на изменение таблицы.
table = provider_manager.openfile(filepath)
table.data_changed.connect(lambda: print('Таблица была изменена.'))
property destroyed: Signal

Сигнал оповещения об удалении объекта.

get_bounds() Rect

Возвращает область, в которую попадают все данные таблицы.

Наименование атрибута таблицы для хранения гиперссылки.

Возможны следующие варианты

Значение

Описание

axioma://world.tab

Открывает файл или рабочее пространство в аксиоме

addlayer://world

Добавляет слой world в текущую карту

exec://gimp

Запускает на выполнение программу gimp

https://axioma-gis.ru/

Открывает ссылку в браузере

Если префикс отсутствует, то производится попытка запустить по ассоциации.

См.также

axipy.render.VectorLayer.hotlink.

insert(features: Union[Feature, Iterable[Feature]])

Вставляет записи в таблицу.

Параметры:

features – Записи для вставки.

property is_editable: bool

Признак того, что таблица является редактируемой.

property is_modified: bool

Таблица содержит несохраненные изменения.

property is_spatial: bool

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

property is_temporary: bool

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

items(bbox: Optional[Union[Rect, QRectF, tuple]] = None, ids: Optional[List[int]] = None) Iterator[Feature]

Запрашивает записи, удовлетворяющие параметрам. В качестве фильтра может быть указан либо ограничивающий прямоугольник, либо перечень идентификаторов в виде списка.

Параметры:
  • bbox – Ограничивающий прямоугольник.

  • ids – Список идентификаторов.

Результат:

Итератор по записям.

itemsByIds(ids: List[int]) Iterator[Feature]

Запрашивает записи по списку list с идентификаторами записей, либо перечень идентификаторов в виде списка. Идентификаторы несохраненных записей имеют отрицательные значения.

Параметры:

ids – Список идентификаторов.

Результат:

Итератор по записям.

Пример
table_world = provider_manager.openfile(filepath)
# Пример запроса по списку идентификаторов.
items = table_world.itemsByIds([11, 27, 41, 163, 203])
for f in items:
    print('Feature id={}. Страна={}'.format(f.id, f['Страна']))
# Просмотр идентификаторов всех записей, включая несохраненные
for f in table_world.items():
    print(f.id, f['Страна'])
# Получение несохраненных записей совместно с сохраненными
items_new = table_world.itemsByIds([-1, -12, 27])
for f in items_new:
    print('Feature id={}. Страна={}'.format(f.id, f['Страна']))
itemsInObject(obj: Geometry) Iterator[Feature]

Запрашивает записи с фильтром по геометрическому объекту.

Параметры:

obj – Геометрия. Если для нее не задана СК, используется СК таблицы.

Результат:

Итератор по записям.

Пример запроса по полигону
table_world = provider_manager.openfile(filepath)
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: Union[Rect, QRectF, tuple]) Iterator[Feature]

Запрашивает записи с фильтром по ограничивающему прямоугольнику.

Параметры:

bbox – Ограничивающий прямоугольник.

Результат:

Итератор по записям.

Пример запроса (таблица в проекции Робинсона)
table_world = provider_manager.openfile(filepath)
v = 2000000
items = table_world.itemsInRect(Rect(-v, -v, v, v))
for f in items:
    print('Feature id={}. Страна={}'.format(f.id, f['Страна']))
property name: str

Название объекта данных.

property properties: dict

Дополнительные свойства объекта данных.

property provider: str

Провайдер изначального источника данных.

redo()

Производит откат на один шаг вперед. При этом возвращается состояние до последней отмены.

remove(ids: Union[int, Iterator[int]])

Удаляет записи из таблицы.

Параметры:

ids – Идентификаторы записей для удаления.

rollback()

Отменяет несохраненные изменения в таблице.

Если таблица не содержит несохраненные изменения, то команда игнорируется.

property schema: Schema

Схема таблицы.

property schema_changed: Signal

Сигнал об изменении схемы таблицы. Испускается когда была изменена структура таблицы.

property sql_text: str

Текст SQL запроса.

property supported_operations: SupportedOperations

Доступные операции.

Пример использования
flags = table.supported_operations
assert flags == SupportedOperations.ReadWrite
assert flags & SupportedOperations.Insert
assert SupportedOperations.Write in flags
undo()

Производит откат на один шаг назад.

update(features: Union[Feature, Iterable[Feature]])

Обновляет записи в таблице.

Параметры:

features – Записи для обновления.

При обновлении проверяется Feature.id. Если запись с таким идентификатором не найдена, то она пропускается.

Пример использования
modified_feature = Feature({'attr_name': 'new_value'}, id=1)
table.update(modified_feature)
table.commit()

См.также

Feature.id, commit(), is_modified.