python - Python 中 geoalchemy2 的 Spatialite 后端

标签 python flask-sqlalchemy flask-admin spatialite geoalchemy2

我正在尝试使用 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)

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

最佳答案

我也遇到了同样的问题,花了一段时间才解决。有很多层(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')

关于python - Python 中 geoalchemy2 的 Spatialite 后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52723239/

相关文章:

python - 存储文本挖掘数据

python - 运行更多任务的 Celery 任务

nginx - 使用 Gunicorn 运行应用程序时未注册 SQLAlchemy 扩展

python - Flask-Admin 模型 View 配置

python - Flask 管理员在更改用户模型时覆盖密码

flask - flask 管理表单编辑规则导致“没有字段”错误

python - 从 S3 下载文件时,AWS Lambda 中出现错误 "Read-only file system"

python - BeautifulSoup - 仅当找到特定字符串时才在标签内获取文本

python-3.x - 类型错误 : add() missing 1 required positional argument: 'instance'

python - 在集成测试 (Pytest) 和 Flask 应用程序之间创建不同的 SQLAlchemy session