Suite

Utiliser Python pour discriminer les géodatabases personnelles et les bases de données MS Access


J'ai besoin de lister les géodatabases d'un serveur, de les analyser et de les traiter. Mes utilisateurs créent cependant à la fois des géodatabases personnelles et des géodatabases MS Access.

Référencementmdbfichiers signale les deux types de bases de données, j'aimerais réduire la liste à géobases de données uniquement. La propriété booléenne de l'espace de travailis_geodatabaseserait exactement ce que je dois utiliser, car il indique si une base de données est spatialement activée ou non. Malheureusement, cette propriété n'est disponible que pour les bases de données SDE.

J'utilise ArcGIS 10.0. et le script ci-dessous. Le choix a été fait de listermdbfichiers par extension en utilisantos.marche()plutôt quearcpy.ListWorkspaces()pour la vitesse du processus, et parce queListe des espaces de travailrécupère les bases de données MS Access de toute façon. Comment puis-je modifier mon script pour signaler seul des géodatabases personnelles, et non des bases de données MS acess plates ?

pour le chemin, les sous-répertoires, les fichiers dans os.walk(analyzed_root_folder) : pour x dans les fichiers : if x.lower().endswith(".mdb") == True : ext_mdb.append( os.path.join(path, x ))

Vérifiez-le avec odbc et recherchez si la base de données contient une table commençant par GDB_

import pyodbc db_file = "C:/path/to/my/database/MyDataBase.mdb" user ="password ="odbc_conn_str = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s;UID=% s;PWD=%s' %  (db_file, user, password) cnxn = pyodbc.connect(odbc_conn_str) cursor = cnxn.cursor() if cursor.tables(table='GDB_GeomColums').fetchone(): print(' Ceci est ArcGIS Personal Geodatabase') del curseur cnxn.close()


Voir la vidéo: Tietokannat ja Python, SQLite (Octobre 2021).