ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • ヘルプ
  • Sign Out
ArcGIS Desktop

ArcGIS Online

組織のマッピング プラットフォーム

ArcGIS Desktop

完全なプロ仕様の GIS

ArcGIS Enterprise

エンタープライズ GIS

ArcGIS for Developers

位置情報利用アプリの開発ツール

ArcGIS Solutions

各種業界向けの無料のテンプレート マップおよびテンプレート アプリケーション

ArcGIS Marketplace

組織で使えるアプリとデータを取得

  • ドキュメント
  • サポート
Esri
  • サイン イン
user
  • マイ プロフィール
  • サイン アウト

ヘルプ

  • ホーム
  • はじめに
  • マップ
  • 解析
  • データ管理
  • ツール
  • その他...

Python でのテーブル名とフィールド名の検証

  • テーブル名の検証
  • フィールド名の検証

テーブル名の検証

ジオデータベースは、さまざまなリレーショナル データベース管理システム (RDBMS) を使用して、ジオデータベースを構成するテーブルを管理します。ジオデータベース内のすべてのテーブルには有効な名前が付いていなければなりません。したがって、ジオデータベースにデータを作成するときは、テーブル名が有効かどうかをチェックする必要があります。スクリプトで ValidateTableName() 関数を使用すると、指定した名前が対象ワークスペースで有効かどうかを確認できます。

検証対象となるテーブル名エラーは次のとおりです。

  • テーブル名で、データ ソースの予約語 (Table など) が使用されている。
  • テーブル名に無効な文字が含まれている。
  • テーブル名の先頭文字が無効である (先頭文字が数値の場合など)。
注意:

ValidateTableName 関数は、指定した名前が対象ワークスペース内で一意かどうかはチェックしません。Exists 関数を使用すれば、特定のワークスペースでテーブル名が一意であるかどうかを確認できます。

関数説明

ValidateTableName(name, {workspace})

テーブル名とワークスペース パスを受け入れ、そのワークスペースに対して有効なテーブル名を返します。

ValidateTableName 関数

ワークスペースをパラメーターとして指定すると、ArcPy は既存のすべてのテーブル名を検査し、出力ワークスペースに命名上の制限があるかどうかを判別できます。出力ワークスペースが RDBMS である場合、テーブル名に使用できない予約語が存在する可能性があります。また、テーブル名やフィールド名に使用できない無効な文字が存在する場合もあります。無効な文字はすべて下線 (_) に置き換えられます。ValidateTableName は、有効なテーブル名を表す文字列を返します。入力として指定した名前が有効であれば、同じ名前が返されます。次の例は、[フィーチャのコピー (Copy Features)] ツールによって作成される新しい出力フィーチャクラスの名前が、どのジオデータベースでも有効な一意の名前であることを保証します。

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

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

# Set the workspace to SDE for ValidateTableName
#
arcpy.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)

フィールド名の検証

各データベースは、テーブルのフィールド名に関して命名上の制限を設けていることがあります。フィーチャクラスやリレーションシップ クラスといったオブジェクトは、RDBMS にテーブルとして格納されるため、これらの制限の影響はテーブル単体だけでなく広範囲にわたります。こうした制限があるかどうかは、データベース システムによって異なります。このため、スクリプトで新しいフィールド名をすべてチェックして、ツールが実行中に失敗しないようにする必要があります。

検証対象となるフィールド名エラーは次のとおりです。

  • フィールド名で、データ ソースの予約語 (Table など) が使用されている。
  • フィールド名が以前に定義したフィールド名と同じである。
  • フィールド名に無効な文字 (* など) が含まれている。
  • データソースで指定されているフィールド名の最大長を超えている。

関数説明

ValidateFieldName(name, {workspace})

文字列 (フィールド名) とワークスペース パスを受け入れ、出力ジオデータベースの命名上の制限に基づいて有効なフィールド名を返します。

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 arcpy.ExecuteError:
    print(arcpy.GetMessages(2))

スクリプトからフィーチャクラスやテーブルなどのデータセットを更新する場合は、データセットがロックされる状況を回避するように注意してください。パーソナル ジオデータベースやファイル ジオデータベースを ArcCatalog でオープンした場合は、そのジオデータベースが選択解除され、フォルダーがリフレッシュされるか ArcCatalog がクローズされるまで、ジオデータベースの内容をスクリプトから更新することはできません。このことはスクリプト ツールにも当てはまります。

関連トピック

  • Python でのクエリの指定
  • ジオデータベースのクイック ツアー
  • テーブルの基礎

ArcGIS Desktop

  • ホーム
  • ドキュメント
  • サポート

ArcGIS プラットフォーム

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Esri について

  • 会社概要
  • 採用情報
  • Esri ブログ
  • ユーザ カンファレンス
  • デベロッパ サミット
Esri
ご意見・ご感想をお寄せください。
Copyright © 2019 Esri. | プライバシー | リーガル