我正在从事一个使用地理点的项目。从过去我对sqlalchemy有了一些了解,所以我决定使用geoalchmy2。
我使用https://registry.hub.docker.com/r/postgis/postgis/映像创建了一个使用GIS的postgres数据库:
在第一个测试中,我使用了地球化学示例页面中的一个简单模型。
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from geoalchemy2 import Geometry
engine = create_engine('postgresql://user:password@localhost/Test', echo=True)
Base = declarative_base()
class Lake(Base):
__tablename__ = 'lake'
id = Column(Integer, primary_key=True)
name = Column(String)
data = Column(Geometry(geometry_type='POINT', srid=5312))
Lake.__table__.create(engine)如果我运行这个程序,我会收到一个错误:sqlalchemy.exc.ProgrammingError:(psycopg2.errors.UndefinedObject)类型“几何学”不存在
我现在花了3天的时间在这个话题上,阅读我能找到的任何东西,但没有找到解决的办法。
发布于 2022-09-13 07:18:20
您的问题是需要将PostGIS作为扩展安装在数据库中。只需通过pgsql shell连接到数据库服务器即可。
psql连接到您的数据库-在本例中是“测试”数据库。
\c Test user然后将扩展安装为拥有该特定数据库的用户。
CREATE EXTENSION postgis;当您注销时,您将能够访问几何类型。
注意:您需要特权才能对拥有数据库的特定用户启用扩展。为了进行测试,您可以使该Test用户成为超级用户。不要在生产中这样做。
ALTER USER Test WITH SUPERUSER;在生产中,您应该实践最小特权原则,只给您的用户最低数量的特权,以操作您的应用程序。这意味着将超级用户限制在应用程序不使用的帐户上,并且(最好)只能通过本地主机访问。
https://stackoverflow.com/questions/70770894
复制相似问题