Проверка имен таблиц и полей в Python

Проверка имен таблицы

Для поддержания множества таблиц, составляющих базу геоданных, используются различные реляционные системы управления базами данных (РСУБД). Имя каждой таблицы базы геоданных должно быть корректным, поэтому механизм проверки корректности имени таблицы является ключевым при создании данных в базе геоданных. С помощью функции Проверить имя таблицы (ValidateTableName), скрипт может определить, является ли конкретное имя корректным для рабочей области.

Ниже перечислены ошибки в именах таблиц, которые будут исправлены:

ПримечаниеПримечание:

Функция Проверить имя таблицы (ValidateTableName) не определяет, является ли конкретное имя уникальным для определенной рабочей области. Проверить уникальность имени таблицы для определенной рабочей области можно с помощью функции Существует (Exists).

Функция

Некоторые ошибки, например, непростая геометрия, можно фиксировать в Editor.

Проверить имя таблицы (ValidateTableName)(имя, {рабочую область})

Принимает имя таблицы и путь рабочей области и возвращает корректное имя таблицы для рабочей области.

Функция Проверить имя таблицы (ValidateTableName)

Указание рабочей области в качестве параметра позволяет ArcPy проверять существующие имена таблицы и определять наличие каких-либо ограничений имен, установленных выходной рабочей областью. Если выходной рабочею областью является РСУБД, она может содержать зарезервированное слова, которые могут не использоваться в имени таблицы. Она также может содержать некорректные символы, которые не могут использоваться в имени таблицы или поля. Некорректные символы заменяются на символ подчеркивания (_). Функция Проверить имя таблицы (ValidateTableName) возвращает строку, содержащую корректное имя таблицы, которое может совпадать с входным именем, если входное имя является корректным. Следующий пример демонстрирует порядок создать такого имени нового выходного класса пространственных объектов, созданного с помощью инструмента Копировать объекты (Copy Features), которое будет уникальным и корректным в любой базе геоданных.

# Move all shapefiles from a folder into a geodatabase
#
import arcpy
from arcpy import env

# Set the workspace. List all of the shapefiles
#
env.workspace = "d:/St_Johns"
fcs = arcpy.ListFeatureClasses("*")

# Set the workspace to SDE for ValidateTableName
#
env.workspace = "Database Connections/Bluestar.sde"

# For each feature class name
#
for fc in fcs: 
    # Validate the output name so it is valid
    #
    outfc = arcpy.ValidateTableName(fc)

    # Copy the features from the workspace to a geodatabase
    #
    arcpy.CopyFeatures_management(fc, outfc)

Проверка имен поля

Каждая база данных может иметь ограничения на задание имен для полей таблицы. Такие объекты, как классы пространственных объектов или классы отношений, сохраняются в виде таблиц в РСУБД. Поэтому эти ограничения действуют не только на отдельные таблицы. Ограничения могут или не могут быть общими для различных систем баз данных, поэтому скрипты должны проверять все новые имена полей, чтобы гарантировать стабильную работу инструмента.

Ниже перечислены ошибки в именах полей, которые будут исправлены:

Функция

Некоторые ошибки, например, непростая геометрия, можно фиксировать в Editor.

Проверить имя поля (ValidateTableName)(имя, {рабочую область})

Принимает строку (имя поля) и путь рабочей области и возвращает корректное имя поля, созданное с учетом ограничений на задание имен в выходной базе геоданных.

Функция Проверить имя поля (ValidateFieldName)

Следующий пример демонстрирует порядок добавления поля независимо от входного имени с помощью функции Проверить имя поля (ValidateFieldName):

# Create a new numeric field containing the ratio of polygon area to
#   polygon perimeter. Two arguments, a feature class and field name,
#   are expected.

# Define a pair of simple exceptions for error handling
#
class ShapeError(Exception):
    pass
class FieldError(Exception):
    pass

import arcpy
import os

try:
    # Get the input feature class and make sure it contains polygons
    #
    input = arcpy.GetParameterAsText(0)
    desc = arcpy.Describe(input)
    if desc.shapeType.lower() != "polygon":
        raise ShapeError

    # Get the new field name and validate it
    #
    fieldname = arcpy.GetParameterAsText(1)
    fieldname = arcpy.ValidateFieldName(fieldname, os.path.dirname(input))

    # Make sure shape_length and shape_area fields exist
    #
    if len(arcpy.ListFields(input,"Shape_area")) > 0 and \
        len(arcpy.ListFields(input,"Shape_length")) > 0:

        # Add the new field and calculate the value
        #
        arcpy.AddField_management(input, fieldname, "double")
        arcpy.CalculateField_management(input,fieldname,
                                        "[Shape_area] / [Shape_length]")
    else:
        raise FieldError

except ShapeError:
    print "Input does not contain polygons"

except FieldError:
    print "Input does not contain shape area and length fields"

except:
    print arcpy.GetMessages(2)

Если скрипт обновляет набор данных, например класс пространственных объектов или таблицу, старайтесь избежать ситуаций, приводящих к блокированию набора данных. Когда вы открываете персональную или файловую базу геоданных в ArcCatalog, скрипт сможет обновить какое-либо содержание базы геоданных только тогда, когда вы снимете с нее отметку и обновите папку или закроете ArcCatalog. Это также относится к инструментам-скриптам:

Связанные темы

9/11/2013