PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Scripts Python pour ingérer un fichier de formes dans une base de données PostgreSQL/PostGIS en utilisant shp2pgsql.exe sous Windows

Voici quelques modifications qui devraient faire fonctionner la chose. Notez qu'il faudrait une modification supplémentaire si vous avez besoin d'être averti si l'une des commandes échoue. Notez qu'il échouera pour plus d'un fichier de formes, car un new_shp_table table existera déjà jusqu'à ce que vous disposiez d'une logique supplémentaire pour déplacer ou renommer cette table ailleurs, ou pour la charger avec un nom unique.

Notez également que PostgreSQL 8.4 atteindra sa fin de vie plus tard cette année, vous voudrez peut-être planifier une mise à niveau vers une version plus récente avant qu'il ne soit trop tard.

import os, subprocess

# Choose your PostgreSQL version here
os.environ['PATH'] += r';C:\Program Files (x86)\PostgreSQL\8.4\bin'
# http://www.postgresql.org/docs/current/static/libpq-envars.html
os.environ['PGHOST'] = 'localhost'
os.environ['PGPORT'] = '5432'
os.environ['PGUSER'] = 'someuser'
os.environ['PGPASSWORD'] = 'clever password'
os.environ['PGDATABASE'] = 'geometry_database'

base_dir = r"c:\shape_file_repository"
full_dir = os.walk(base_dir)
shapefile_list = []
for source, dirs, files in full_dir:
    for file_ in files:
        if file_[-3:] == 'shp':
            shapefile_path = os.path.join(base_dir, file_)
            shapefile_list.append(shapefile_path)
for shape_path in shapefile_list:
    cmds = 'shp2pgsql "' + shape_path + '" new_shp_table | psql '
    subprocess.call(cmds, shell=True)