Her er nogle ændringer, der burde få tingene til at fungere. Bemærk, at det skal ændres yderligere, hvis du skal have besked, hvis nogen af kommandoerne mislykkes. Bemærk, at det vil mislykkes for mere end én shapefil, da en new_shp_table
tabel vil allerede eksistere, indtil du har yderligere logik til at flytte eller omdøbe den tabel et andet sted, eller at indlæse den med et unikt navn.
Bemærk også, at PostgreSQL 8.4 når sin afslutning senere i år, så du vil måske planlægge at opgradere til en nyere udgivelse, før det er for sent.
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)