【问题标题】:spatialite backend for geoalchemy2 in PythonPython中geoalchemy2的spatialite后端
【发布时间】:2019-03-14 08:42:07
【问题描述】:

我正在尝试使用geoalchemy2 进行 SQLITE/spatialite。根据link看来是可以的。

我认为我的问题来自自定义引擎。

到目前为止我所拥有的:

from flask_sqlalchemy import SQLAlchemy
from geoalchemy2 import Geometry
#and other imports...

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////Users/cricket/Documents/peas project/open-peas/localapp/test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_ECHO'] = True

db = SQLAlchemy(app)

class Polygon(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    point = db.Column(Geometry("POLYGON"))

@app.before_first_request
def init_request():
    db.create_all()

当我启动脚本时,我收到以下消息:

cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) near "POLYGON": syntax error [SQL: '\nCREATE TABLE polygon (\n\tid INTEGER NOT NULL, \n\tname VARCHAR(64), \n\tpoint geometry(POLYGON,-1), \n\tPRIMARY KEY (id), \n\tUNIQUE (name)\n)\n\n'] (Background on this error at: http://sqlalche.me/e/e3q8)

知道如何解决这个问题吗?

【问题讨论】:

    标签: python flask-sqlalchemy flask-admin spatialite geoalchemy2


    【解决方案1】:

    在同一个问题上苦苦挣扎,即使答案已被接受,我最终意识到Geometry() 构造函数的management 参数丢失了,正如here 所解释的那样。

    以下内容应向 DB API 发送正确的 sql 命令:

    class Polygon(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
        point = db.Column(Geometry("POLYGON", management = True))
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,花了一段时间才解决。有一堆层(SQLAlchemy、Flask、SQLite、spatialite、Flask 的 SQLAlchemy 扩展......)一起工作。希望这会有所帮助:

      from sqlalchemy import event
      
      db = SQLAlchemy(app)
      
      @event.listens_for(db.engine, "connect")
      def load_spatialite(dbapi_conn, connection_record):
        # From https://geoalchemy-2.readthedocs.io/en/latest/spatialite_tutorial.html
        dbapi_conn.enable_load_extension(True)
        dbapi_conn.load_extension('/usr/lib/x86_64-linux-gnu/mod_spatialite.so')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-06
        • 2016-07-16
        • 1970-01-01
        • 1970-01-01
        • 2013-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多