यहां कुछ संशोधन दिए गए हैं जो काम करना चाहिए। ध्यान दें कि यदि कोई आदेश विफल हो जाता है तो आपको अधिसूचित होने की आवश्यकता होने पर इसे और संशोधन की आवश्यकता होगी। ध्यान दें कि new_shp_table
. के बाद से यह एक से अधिक शेपफाइल के लिए विफल हो जाएगा तालिका तब तक मौजूद रहेगी जब तक आपके पास उस तालिका को कहीं और स्थानांतरित करने या उसका नाम बदलने, या उसे एक अद्वितीय नाम से लोड करने के लिए और तर्क न हो।
साथ ही, ध्यान दें कि PostgreSQL 8.4 इस साल के अंत में अपने जीवन के अंत तक पहुंच जाएगा, इसलिए हो सकता है कि इससे पहले कि बहुत देर हो जाए, आप एक और हालिया रिलीज में अपग्रेड करने की योजना बनाना चाहें।
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)