چطور از پایتون (psycopg و GeoPandas) به PostGIS وصل شوم؟
پاسخ کوتاه
با psycopg رشته اتصال با sslmode=require بدهید و با SQL بخوانید، یا با GeoPandas و SQLAlchemy از read_postgis و to_postgis استفاده کنید. حتماً اتصال را ببندید یا از pool استفاده کنید تا از سقف اتصال همزمان پلن عبور نکنید.
با psycopg
import psycopg
with psycopg.connect("host=HOST port=PORT dbname=DB user=USER password=PASS sslmode=require") as conn:
rows = conn.execute("SELECT name, ST_AsGeoJSON(geom) FROM places LIMIT 10").fetchall()
for name, geojson in rows:
print(name, geojson)
مقدارهای HOST، PORT، DB و USER را از اطلاعات اتصال بگیرید.
با GeoPandas
import geopandas as gpd
from sqlalchemy import create_engine
engine = create_engine("postgresql+psycopg2://USER:PASS@HOST:PORT/DB?sslmode=require")
gdf = gpd.read_postgis("SELECT * FROM parcels", engine, geom_col="geom")
# نوشتن
gdf.to_postgis("parcels_copy", engine, if_exists="replace")
این روش به بسته psycopg2 هم نیاز دارد. رمزی که نویسههای خاص (@، :، /) دارد باید در URL کدگذاری شود (قالب رشته اتصال).
نکتههای مهم
- اتصالها را ببندید (
with) یا از یک pool با حداکثر ۳ اتصال استفاده کنید؛ سقف پلن ۱۰ اتصال همزمان است (توضیح). - برای فایلهای بزرگ، ogr2ogr سریعتر و کمحافظهتر است (ورود با ogr2ogr).
- GeoPandas ستون هندسه را با SRID برمیدارد؛ اگر
to_postgisبدون CRS باشد SRID ثبت نمیشود، پس CRS را روی gdf بگذارید.
آیا این مقاله به شما کمک کرد؟
هنوز جواب نگرفتید؟ به پشتیبانی بگویید.