我正在使用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。有没有人找到解决方案?
答案 0 :(得分:0)
它不会覆盖GeoAlchemy2。如果您使用previous version of GeoAlchemy,则可以使用GeometryColumn
作为列。
第一个错误是由Flask-SQLAlchemy gives you access to functions etc. from sqlalchemy
and sqlalchemy.orm
中的SQLAlchemy
对象引起的。它不包括GeoAlchemy2等的东西。
第二个错误是由于范围中没有名称GeometryColumn
。您确实从Geometry
导入geoalchemy2
,但不要使用它。
阅读GeoAlchemy2 ORM tutorial您会注意到几何列定义为
geom = Column(Geometry('POLYGON'))
或在你的情况下
geom = db.Column(Geometry('LINESTRING')) # dimension defaults to 2
请注意,db.Column
是sqlalchemy.schema.Column
,只是在另一个命名空间中。