我正在尝试在geoalchemy ORM tutorial之后使用带有geoalchemy2和sqlalchemy的地理数据创建表
我在使用的架构上安装了postgis扩展。我要连接的用户是架构的所有者。
当我运行python代码时:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from geoalchemy2 import Geography
import src.config as config
Base = declarative_base()
class Lake(Base):
__tablename__ = 'lake'
__table_args__ = ({'schema': 'geobox'})
id = Column(Integer, primary_key=True)
country_iso_code = Column(String(2))
zone_code = Column(String(45))
zone_type = Column(String(45))
zone_test = Column(Geography('POINT'))
from sqlalchemy import create_engine
engine = create_engine('postgres://{user}:{pwd}@{host}:{port}/{database}'.format(
user=config.DbConfig().username,
pwd=config.DbConfig().password,
host=config.DbConfig().host,
port=config.DbConfig().port,
database=config.DbConfig().database), echo=True)
Lake.__table__.create(engine)
我得到了错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) type "geography" does not exist
我在这里想念什么?
答案 0 :(得分:0)
我发现search_path的设置不正确,因为postgis已安装在表级别而不是架构级别。
然后与sqlalchemy不相关。我只需要更改search_path,以使pg可以找到安装了postgis的表:
ALTER ROLE "my_role_name" SET search_path TO 'my_table_name',"$user",public;
(假设my_table_name是已安装postgis扩展名的表的名称)