TransactionalTable - Интерфейс транзакционной таблицы¶
-
class
axioma.core.dp.
TransactionalTable
¶ Примечание
Абстрактный
Абстрактный класс, представляющий транзакционную таблицу. Из редактируемой таблицы
EditableTable
можно получить транзакционную,используя функциюwrap()
. Если для открытия использовать методaxioma.core.open_json()
, то в случае, если есть возможность редактирования таблицы, внутренняя транзакционная таблица создается по умолчанию. Если транзакционная таблица создана, все изменения таблицы (вставка/изменение/удаление) производятся в нее. После вызова методаcommit()
изменения сохраняются в основной таблице.Унаследован от:
Методы:
-
commit
()¶ Внести все изменения в таблицу. При этом все изменения из файла транзакции сохранятся в основной таблице.
-
restore
()¶ Отменить все изменения таблицы. Производится очистка файла транзакций.
-
setAutoCommit
()¶ Устанавливает режим автоматического подтверждения изменений при закрытии таблицы без явного подтверждения (
axioma.core.dp.HasFeatureHistory.commit()
) или отказа (axioma.core.dp.HasFeatureHistory.restore()
)
-
setAutoRollback
()¶ Устанавливает режим автоматического отказа от изменений при закрытии таблицы (используется по умолчанию)
-
Функции:
-
axioma.core.dp.
wrap
(edit_table)¶ Обернуть редактируемую таблицу в транзакционную. Файл транзакции будет создан, если это возможно, в директории с данными редактируемой таблицы, иначе будет создан
временный файл
.- Параметры
edit_table (
EditableTable
) – редактируемая таблица
-
axioma.core.dp.
wrap
(edit_table, file_path)¶ Обернуть редактируемую таблицу в транзакционную
- Параметры
edit_table (
EditableTable
) – редактируемая таблицаfile_path (
str
) – путь к файлу транзакции, который будет создан
-
axioma.core.dp.
recoverHistory
(edit_table, file_path)¶ Восстановление файла транзакций после аварийного завершения программы. Если в процессе редактирования возникла ситуация, при которой внесенные изменения не были сохранены в таблице, то после открытия этой таблицы можно явно попытаться восстановить потерянные данные.
- Параметры
edit_table (
EditableTable
) – редактируемая таблицаfile_path (
str
) – наименование таблицы на основе которого формируется наименование файла транзакций, из которого будет произведена попытка восстановления
- Результат
Успешность выполнения операции. Если восстановление произведено, возвращается True.
- Тип результата
-
axioma.core.dp.
recoverHistory
(edit_table)¶ Восстановление файла транзакций. В данном случае будет предпринята попытка неявно определить наименование редактируемой таблицы.
- Параметры
edit_table (
EditableTable
) – редактируемая таблица- Результат
Успешность выполнения операции. Если восстановление произведено, возвращается True.
- Тип результата
Пример использования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | # Пример кода для открытия и редактирования таблицы с помощью JSON
from axioma.core.dp import *
from axioma.cs import *
from axioma.core.geometry import *
from axioma.render import *
from axioma.common import RuntimeException
from axioma.mapinfo import *
import axioma.core
from PyQt5.QtCore import *
from PyQt5.QtGui import *
'''
Пример вставки объекта в таблицу и сохранение информации об изменениях.
При занесении информации до вызова commit используется файл транзакций.
'''
# Открываем таблицу
json = {
"src": "/tmp/world.tab"
}
table = axioma.core.open_json(json)
if table is None:
raise RuntimeException("Таблица не открыта")
assert(isinstance(table, TransactionalTable))
axioma.app.mainWindow.registerDataObject(table)
# Определяем индексы изменяемых полей
index_geometry = table.tableSchema().geometryIndex()
index_style = table.tableSchema().styleIndex()
index_country = table.tableSchema().indexOf('Country')
# Вставка
new_feature = Feature.createFeature(table.tableSchema())
# Устанавливаем геометрию по индексу поля
poly = QPolygonF();
v = 1000000
poly << QPointF(-v, -v) << QPointF(-v, v) << QPointF(v, v) << QPointF(v, -v) << QPointF(-v, -v)
polygon = Polygon(table.coordSystem(), poly)
new_feature.setAttribute(index_geometry, polygon)
new_feature.setModified(index_geometry, True)
new_feature.setAttribute(index_country, 'New Country')
new_feature.setModified(index_country, True)
style = MapBasicStyle().styleFromString('Pen (1,2,0) Brush (2, 65280, 16777215)')
new_feature.setAttribute(index_style, style)
new_feature.setModified(index_style, True)
# Вставка в транзакционную таблицу
table.insert([new_feature])
table.commit()
|