首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建表时发生geoalchemy2错误

创建表时发生geoalchemy2错误
EN

Stack Overflow用户
提问于 2022-01-19 12:50:53
回答 1查看 100关注 0票数 1

我正在从事一个使用地理点的项目。从过去我对sqlalchemy有了一些了解,所以我决定使用geoalchmy2。

我使用https://registry.hub.docker.com/r/postgis/postgis/映像创建了一个使用GIS的postgres数据库:

在第一个测试中,我使用了地球化学示例页面中的一个简单模型。

代码语言:javascript
复制
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天的时间在这个话题上,阅读我能找到的任何东西,但没有找到解决的办法。

EN

回答 1

Stack Overflow用户

发布于 2022-09-13 07:18:20

您的问题是需要将PostGIS作为扩展安装在数据库中。只需通过pgsql shell连接到数据库服务器即可。

代码语言:javascript
复制
psql

连接到您的数据库-在本例中是“测试”数据库。

代码语言:javascript
复制
\c Test user

然后将扩展安装为拥有该特定数据库的用户。

代码语言:javascript
复制
CREATE EXTENSION postgis;

当您注销时,您将能够访问几何类型。

注意:您需要特权才能对拥有数据库的特定用户启用扩展。为了进行测试,您可以使该Test用户成为超级用户。不要在生产中这样做。

代码语言:javascript
复制
ALTER USER Test WITH SUPERUSER;

在生产中,您应该实践最小特权原则,只给您的用户最低数量的特权,以操作您的应用程序。这意味着将超级用户限制在应用程序不使用的帐户上,并且(最好)只能通过本地主机访问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70770894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档