Dưới đây là một số sửa đổi sẽ làm cho mọi thứ hoạt động. Lưu ý rằng nó sẽ cần sửa đổi thêm nếu bạn cần được thông báo nếu bất kỳ lệnh nào không thành công. Lưu ý rằng nó sẽ không thành công cho nhiều tệp hình dạng, vì một new_shp_table
bảng sẽ tồn tại cho đến khi bạn có thêm logic để di chuyển hoặc đổi tên bảng đó ở nơi khác hoặc tải nó bằng một tên duy nhất.
Ngoài ra, hãy lưu ý rằng PostgreSQL 8.4 sẽ hết hạn sử dụng vào cuối năm nay, vì vậy bạn có thể muốn lên kế hoạch nâng cấp lên bản phát hành mới hơn trước khi quá muộn.
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)