sql >> Base de Datos >  >> RDS >> PostgreSQL

Python Scripts para ingerir un archivo de forma en una base de datos PostgreSQL/PostGIS utilizando shp2pgsql.exe en Windows

Aquí hay algunas modificaciones que deberían hacer que las cosas funcionen. Tenga en cuenta que necesitaría más modificaciones si necesita que se le notifique si alguno de los comandos falla. Tenga en cuenta que fallará para más de un archivo de forma, ya que un new_shp_table la tabla ya existirá hasta que tenga más lógica para mover o cambiar el nombre de esa tabla en otro lugar, o para cargarla con un nombre único.

Además, tenga en cuenta que PostgreSQL 8.4 llegará al final de su vida útil más adelante este año, por lo que es posible que desee planificar la actualización a una versión más reciente antes de que sea demasiado tarde.

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)