Hier zijn enkele wijzigingen die het ding moeten laten werken. Houd er rekening mee dat het verder moet worden gewijzigd als u op de hoogte moet worden gesteld als een van de opdrachten mislukt. Merk op dat het zal mislukken voor meer dan één shapefile, aangezien een new_shp_table
tabel zal al bestaan totdat je meer logica hebt om die tabel ergens anders te verplaatsen of te hernoemen, of om hem te laden met een unieke naam.
Houd er ook rekening mee dat PostgreSQL 8.4 later dit jaar aan het einde van zijn levensduur komt, dus misschien wilt u plannen om te upgraden naar een recentere release voordat het te laat is.
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)