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)Обернуть редактируемую таблицу в транзакционную
Параметры: |
|
---|
Пример использования:
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()
|