axioma.core.dp.
DatabaseProviderExportSupport
¶Класс с описанием допустимых значений дополнительных параметров при экспорте в базу данных
Унаследован от: ProviderExportSupport
geometryColumnNameTag;
Наименование геометрической колонки (Строковое)
sridTag;
Значение SRID (Целое)
renditonColumnNameTag;
Наименование колонки с оформлением (Строковое)
logFileTag;
Наименование файла, куда будут прописываться успешно выполненные команды (Строковое)
errorFileTag;
Наименование файла, куда будут прописываться команды по вставке записей, не принятых сервером (Строковое)
dropTableTag;
Предварительно удалять существующую таблицу, если она присутствует в БД (Логическое)
createIndexTag;
Создавать пространственный индекс (Логическое)
mapCatalogTag;
Регистрация импортируемой таблицы в mapinfo.mapinfo_mapcatalog (Логическое)
geometryAsTextTag;
Геометрию экспортировать как текстовые объекты (Логическое). Если указано True, то структура создаваемой таблицы будет создана из расчета хранения только текстовых объектов в формате MIF
axioma.core.dp.
DatabaseProvider
¶Провайдер для баз данных
Унаследован от: DataProvider
, DatabaseProviderExportSupport
DatabaseProvider
(parent=None)¶Конструктор
Параметры: parent ( QObject
илиNone
) – Родительский объект
createDataSourceDefinition
(typeId)¶Создание описания источника данных
Параметры: typeId ( str
) – Строка с типом провайдераРезультат: Созданный объект описания Тип результата: DataSourceDefinition
createDatabaseDefinition
(host, dbName, userName, password, port = 0)¶Создание описания базы данных
Параметры: Результат: Созданный объект описания
Тип результата:
defaultPort
()¶Стандартный порт для подключения к конкретной СУБД
Результат: True, если да. В противном случае False Тип результата: bool
linkedProvider
()¶Провайдер данных, который используется для работы со связанными таблицами
Результат: Провайдер Тип результата: DataProvider
Пример использования:
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | import axioma.render
from axioma.common import RuntimeException
from axioma.core.dp import *
from PyQt5.QtCore import *
from PyQt5.QtGui import QGuiApplication
import sys
'''
Пример экспорта таблицы в БД postgresql.
В базе должно присутствовать расширение postgis
'''
a = QGuiApplication(sys.argv)
render = axioma.render.Render()
render.initialize()
# Открываем исходную таблицу
table = axioma.core.open_json({'src': '/tmp/SubjectRF.TAB'})
try:
if table is None:
raise RuntimeException("Таблица не открыта")
# Находим необходимый провайдер. В данном случае PostgreSQL
dataProvider = axioma.app.core.dataProviderById("PgDataProvider")
if dataProvider is not None:
# Описание источника данных, куда будем производить экспорт
dbDefinition = dataProvider.createDatabaseDefinition('localhost', 'esti', 'postgres', '')
# Параметры экспорта
jd = JsonDefinition()
# Установка в параметрах описания источника подключения
JsonDBExportController.setDbDef(jd, dbDefinition)
tableName = '{}_export'.format(table.name())
# Наименование результирующей таблицы
JsonDBExportController.setObject(jd, tableName)
# Координатная система
JsonDBExportController.setPrj(jd, table.coordSystem())
# Дополнительные параметры (опционально)
params = {
# Скрипт с успешно выполненными командами
DatabaseProviderExportSupport.logFileTag: QDir.temp().filePath('export_success.sql'),
# Скрипт с ошибочными записями
DatabaseProviderExportSupport.errorFileTag: QDir.temp().filePath('export_error.sql'),
# Наменование колонки с оформлением
DatabaseProviderExportSupport.renditonColumnNameTag: 'mi_style',
# Наменование колонки с геометрией
DatabaseProviderExportSupport.geometryColumnNameTag:'geometry',
# Предварительно удалять таблицу
DatabaseProviderExportSupport.dropTableTag:True,
# Создавать пространственный индекс
DatabaseProviderExportSupport.createIndexTag:True,
# Регистрация в таблице MAPINFO_MAPCATALOG
DatabaseProviderExportSupport.mapCatalogTag:True,
# SRID с базе данных для проекции
DatabaseProviderExportSupport.sridTag:4326
}
# Устанавливаем дополнительные параметры
JsonDBExportController.setExportParams(jd, params)
# Создаем контекст
context = ProviderExportContext(ModifiedTableSchema(table.tableSchema()))
# Открывем запрос для исходной таблицы
cursor = table.select(QuerySelectAll( table.tableSchema().attributeNames()))
# Производим экспорт. Если необходим отклик системы предлагаем использовать SignalingCursor
dataProvider.exportFeatures(cursor, context, jd)
else:
raise RuntimeException("Провайдер не найден")
except Exception as ex:
print(ex)
|