Пространственный бэкэнд для геоалхимии2 в Python - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь SQLITE / пространственный с geoalchemy2.Кажется, это возможно в соответствии с тем, что ссылка .

Моя проблема возникает, я думаю, из пользовательского движка.

Что у меня есть:

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)

Есть идеи, как мне это исправить?

1 Ответ

0 голосов
/ 13 ноября 2018

У меня была такая же проблема, и мне потребовалось время, чтобы решить ее.Есть несколько слоев (SQLAlchemy, Flask, SQLite, пространственный, расширение SQLAlchemy Flask, ....), работающих вместе.Надеюсь, это поможет:

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')
...