TransactionalTable - Интерфейс транзакционной таблицы

class axioma.core.dp.TransactionalTable

Абстрактный класс, представляющий транзакционную таблицу. Из редактируемой таблицы EditableTable можно получить транзакционную,используя функцию wrap(). Если для открытия использовать метод axioma.core.open_json(), то в случае, если есть возможность редактирования таблицы, внутренняя транзакционная таблица создается по умолчанию. Если транзакционная таблица создана, все изменения таблицы (вставка/изменение/удалени) производятся в нее. После вызова метода commit() измениния сохраняются в основной таблице.

Унаследован от:

Функции:

axioma.core.dp.wrap(edit_table)

Обернуть редактируемую таблицу в транзакционную. Файл транзакции будет создан, если это возможно, в директории с данными редактируемой таблицы, иначе будет создан временный файл.

Параметры:edit_table (EditableTable) – редактируемая таблица
axioma.core.dp.wrap(edit_table, file_path)

Обернуть редактируемую таблицу в транзакционную

Параметры:
  • edit_table (EditableTable) – редактируемая таблица
  • file_path (str) – путь к файлу транзакции, который будет создан

Пример использования:

 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()