GeoAlchemy2的Alembic迁移引发NameError:名称'geoalchemy2'未定义

时间:2016-08-29 21:10:58

标签: python postgresql flask alembic geoalchemy2

我决定使用Flask,postgresql和leaflet编写一个小的webapp。我想使用PostGIS扩展程序为postgresql存储坐标(纬度和经度)。我的烧瓶应用程序使用Flask-SQLAlchemy,blueprint,特别是Flask-Migrate进行数据库迁移过程。

以下是我的数据库模型的摘录:

from . import db
from geoalchemy2 import Geometry


class Station(db.Model):
    __tablename__ = 'stations'

    id = db.Column(db.Integer, primary_key=True, unique=True)
    name = db.Column(db.String(255))
    position = db.Column(Geometry('Point', srid=4326))

此处摘录了我的app / init .py

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from config import config

db = SQLAlchemy()
migrate = Migrate()

def create_app(config_name=None, main=True):

if config_name is None:
    config_name = os.environ.get('FLASK_CONFIG', 'development')

app = Flask(__name__)
app.config.from_object(config[config_name])

db.init_app(app)
migrate.init_app(app, db)

from .home import home as home_blueprint
app.register_blueprint(home_blueprint)

from .admin import admin as admin_blueprint
app.register_blueprint(admin_blueprint, url_prefix='/admin')

return app

在尝试使用特定扩展器之前,我没有任何问题来调整我的模型。从那时起,迁移工作正常,但升级不起作用(python manage.py db upgrade)。

这是我从网络服务器获取的日志:

sa.Column('position', geoalchemy2.types.Geometry(geometry_type='POINT', srid=4326), nullable=True),
`enter code here`NameError: name 'geoalchemy2' is not defined

我有点失落,我在这个特定主题上没有找到太多帮助。关于什么可能导致这个问题的任何想法?

1 个答案:

答案 0 :(得分:3)

Alembic不会尝试在迁移脚本中确定和呈现自定义类型的所有导入。编辑生成的脚本以包含from geoalchemy2.types import Geometry,并将列def更改为仅使用Geometry

在运行之前,您应该始终查看自动生成的脚本。脚本中甚至有评论这么说。