【问题标题】:How to use an existing PostGIS database in a Flask web app如何在 Flask Web 应用程序中使用现有的 PostGIS 数据库
【发布时间】:2018-05-04 09:11:03
【问题描述】:

我正在使用 Flask 和我已经创建的 PostGIS 数据库构建一个 Web 应用程序。我正在努力让 Flask-SQLAlchemy 接受我现有数据库的 geom 列。我在 init.py 文件中声明 db

from flask import Flask, request, current_app
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

import os, logging

db = SQLAlchemy()
migrate = Migrate()

def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    db.init_app(app)
    migrate.init_app(app, db)

我的 models.py 文件的代码如下所示:

from app import login, db
from datetime import datetime
from geoalchemy2 import Geometry
from time import time
from flask import current_app

class Streets(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    street = db.Column(db.String(50))
    geom = db.GeometryColumn(db.LineString(2))

我得到的错误是:AttributeError: 'SQLAlchemy' object has no attribute 'GeometryColumn'

如果我尝试从 geom 行中删除 db.,我会收到以下错误:NameError: name 'GeometryColumn' is not defined

因为 Flask-SQLAlchemy 希望你使用db.Column 声明一个列,所以它似乎覆盖了 geoalchemy2。有没有人找到解决办法?

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy geoalchemy2


    【解决方案1】:

    它不会覆盖 GeoAlchemy2。如果您使用的是previous version of GeoAlchemy,则可以使用GeometryColumn 作为列。

    第一个错误是由来自 Flask-SQLAlchemy gives you access to functions etc. from sqlalchemy and sqlalchemy.ormSQLAlchemy 对象引起的。它不包括来自 GeoAlchemy2 之类的东西。

    第二个错误是由于范围内没有名称 GeometryColumn。您确实从geoalchemy2 导入Geometry,但不要使用它。

    阅读GeoAlchemy2 ORM tutorial 你会注意到几何列被定义为

    geom = Column(Geometry('POLYGON'))
    

    或者在你的情况下

    geom = db.Column(Geometry('LINESTRING'))  # dimension defaults to 2
    

    注意db.Columnsqlalchemy.schema.Column,只是在另一个命名空间中。

    【讨论】:

    • 谢谢!现在我明白了!在搜索和搜索之后,我还发现了另一个使用这种语法的帖子:geom = db.Column(Geometry(geometry_type='LINESTRING')),它成功了。我想我可以删除“geometry_type”,它仍然可以按照你的建议工作。
    • 我找到的另一篇文章的链接:stackoverflow.com/questions/4069595/…
    猜你喜欢
    • 2012-05-06
    • 2014-09-03
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多