首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GeoAlchemy2的Alembic迁移引发NameError:未定义名称'geoalchemy2‘

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

Stack Overflow用户
提问于 2016-08-29 21:10:57
回答 2查看 3.1K关注 0票数 5

我决定用烧瓶、postgresql和传单来编写一个小型的and应用程序。我想使用postgresql的PostGIS扩展程序来存储坐标(纬度和经度)。我的烧瓶应用程序使用了,蓝图,尤其是用于数据库迁移过程的烧瓶-迁移。

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

代码语言:javascript
运行
复制
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))

这里摘录了我的应用程序/init.py

代码语言:javascript
运行
复制
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升级)。

在这里,我从Here服务器获得的日志:

代码语言:javascript
运行
复制
sa.Column('position', geoalchemy2.types.Geometry(geometry_type='POINT', srid=4326), nullable=True),
`enter code here`NameError: name 'geoalchemy2' is not defined

我有点迷茫,在这个具体问题上找不到多少帮助。知道是什么导致了这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-29 21:14:03

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

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

票数 7
EN

Stack Overflow用户

发布于 2022-01-04 03:34:06

另一种不需要手工编辑修改的方法是将import geoalchemy2添加到alembic/script.py.mako中,然后每次都添加模块。

代码语言:javascript
运行
复制
"""${message}
  
Revision ID: ${up_revision}
Revises: ${down_revision | comma,n}
Create Date: ${create_date}

"""
from alembic import op
import sqlalchemy as sa
import geoalchemy2 # <--- right here
${imports if imports else ""}

# revision identifiers, used by Alembic.
revision = ${repr(up_revision)}
down_revision = ${repr(down_revision)}
branch_labels = ${repr(branch_labels)}
depends_on = ${repr(depends_on)}


def upgrade():
    ${upgrades if upgrades else "pass"}


def downgrade():
    ${downgrades if downgrades else "pass"}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39215278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档