sql >> Databasteknik >  >> RDS >> PostgreSQL

Python-skript för att mata in en shapefil i en PostgreSQL/PostGIS-databas med shp2pgsql.exe på Windows

Här är några ändringar som borde få det att fungera. Observera att det skulle behöva ändras ytterligare om du behöver meddelas om något av kommandona misslyckas. Observera att det kommer att misslyckas för mer än en shapefil, eftersom en new_shp_table Tabell kommer redan att existera tills du har ytterligare logik för att flytta eller byta namn på den tabellen någon annanstans, eller för att ladda den med ett unikt namn.

Observera också att PostgreSQL 8.4 kommer att ta slut senare i år, så du kanske vill planera att uppgradera till en nyare version innan det är för 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)



  1. Odefinierad referens till MySQL-bibliotek som använder g++

  2. förbättra MySQL-relaterade artikelfråga

  3. Hur man anger primärnyckelnamn i EF-Code-First

  4. sql-fråga med if-statment