DatabaseProviderExportSupport

class axioma.core.dp.DatabaseProviderExportSupport

Класс с описанием допустимых значений дополнительных параметров при экспорте в базу данных

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

geometryColumnNameTag;

Наименование геометрической колонки (Строковое)

sridTag;

Значение SRID (Целое)

renditonColumnNameTag;

Наименование колонки с оформлением (Строковое)

logFileTag;

Наименование файла, куда будут прописываться успешно выполненные команды (Строковое)

errorFileTag;

Наименование файла, куда будут прописываться команды по вставке записей, не принятых сервером (Строковое)

dropTableTag;

Предварительно удалять существующую таблицу, если она присутствует в БД (Логическое)

createIndexTag;

Создавать пространственный индекс (Логическое)

mapCatalogTag;

Регистрация импортируемой таблицы в mapinfo.mapinfo_mapcatalog (Логическое)

geometryAsTextTag;

Геометрию экспортировать как текстовые объекты (Логическое). Если указано True, то структура создаваемой таблицы будет создана из расчета хранения только текстовых объектов в формате MIF

DatabaseProvider

class axioma.core.dp.DatabaseProvider

Провайдер для баз данных

Унаследован от: DataProvider, DatabaseProviderExportSupport

DatabaseProvider(parent=None)

Конструктор

Параметры:parent (QObject или None) – Родительский объект
createDataSourceDefinition(typeId)

Создание описания источника данных

Параметры:typeId (str) – Строка с типом провайдера
Результат:Созданный объект описания
Тип результата:DataSourceDefinition
createDatabaseDefinition(host, dbName, userName, password, port = 0)

Создание описания базы данных

Параметры:
  • host (str) – Наименование хоста
  • dbName (str) – Наименование базы данных
  • userName (str) – Имя пользователя для подключения к базе данных
  • password (str) – Пароль
  • port (int) – Порт для подключения. Если не задано значение, то подставляется значение по умолчанию
Результат:

Созданный объект описания

Тип результата:

DatabaseDefinition

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)