sql >> Database teknologi >  >> RDS >> PostgreSQL

Python-scripts til at indsætte en shapefil i en PostgreSQL/PostGIS-database ved hjælp af shp2pgsql.exe på Windows

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)



  1. Sletter post med laveste ID

  2. Hvorfor får jeg TableRegistry ikke fundet i CakePhP 3.0?

  3. Hvad hvis jeg har brug for et meget meget stort autoincrement-id?

  4. Duplikatindtastning for nøgle 'PRIMARY' .Ignorerer mellemrummene for strenge