如何在 Flask 网络应用程序中使用现有的 PostGIS 数据库
How to use an existing PostGIS database in a Flask web app
我正在使用 Flask 和我已经创建的 PostGIS 数据库构建一个网络应用程序。我正在努力让 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。有人找到解决办法了吗?
它不会覆盖 GeoAlchemy2。如果您使用的是 previous version of GeoAlchemy.
,则可以使用 GeometryColumn
作为列
第一个错误是由 Flask-SQLAlchemy gives you access to functions etc. from sqlalchemy
and sqlalchemy.orm
中的 SQLAlchemy
对象引起的。它不包括来自 GeoAlchemy2 等的内容。
第二个错误是由于范围内没有名称 GeometryColumn
。您从 geoalchemy2
导入 Geometry
,但不要使用它。
阅读 GeoAlchemy2 ORM tutorial 您会注意到几何列被定义为
geom = Column(Geometry('POLYGON'))
或者你的情况
geom = db.Column(Geometry('LINESTRING')) # dimension defaults to 2
请注意 db.Column
是 sqlalchemy.schema.Column
,只是在另一个命名空间中。
我正在使用 Flask 和我已经创建的 PostGIS 数据库构建一个网络应用程序。我正在努力让 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。有人找到解决办法了吗?
它不会覆盖 GeoAlchemy2。如果您使用的是 previous version of GeoAlchemy.
,则可以使用GeometryColumn
作为列
第一个错误是由 Flask-SQLAlchemy gives you access to functions etc. from sqlalchemy
and sqlalchemy.orm
中的 SQLAlchemy
对象引起的。它不包括来自 GeoAlchemy2 等的内容。
第二个错误是由于范围内没有名称 GeometryColumn
。您从 geoalchemy2
导入 Geometry
,但不要使用它。
阅读 GeoAlchemy2 ORM tutorial 您会注意到几何列被定义为
geom = Column(Geometry('POLYGON'))
或者你的情况
geom = db.Column(Geometry('LINESTRING')) # dimension defaults to 2
请注意 db.Column
是 sqlalchemy.schema.Column
,只是在另一个命名空间中。