2016-08-29 2 views
0

Flask, postgresql 및 전단을 사용하여 작은 webapp를 작성하기로 결정했습니다. postgresql에 PostGIS 익스텐더를 사용하여 좌표 (위도와 경도)를 저장하고 싶습니다. 플라스크 응용 프로그램은 Flask-SQLAlchemy, 청사진, 특히 데이터베이스 마이그레이션 프로세스를위한 Flask-Migrate를 사용합니다. 여기 GeoAlchemy2에 대한 Alembic 마이그레이션 NameError : 'geoalchemy2'의 이름이 정의되지 않았습니다.

내 데이터베이스 모델의 발췌 한 것입니다 : 여기

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

내 응용 프로그램의 발췌/초기화

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 

특정 확장자를 사용하기 전에, 나는 'didn를 내 모델에 적응하는 데 문제가 없습니다. 그 이후로 마이그레이션이 제대로되었지만 업그레이드가 작동하지 않습니다 (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

Alembic은 마이그레이션 스크립트에서 사용자 지정 유형에 대한 모든 가져 오기를 결정하고 렌더링하려고하지 않습니다. 생성 된 스크립트를 편집하여 from geoalchemy2.types import Geometry을 포함하고 열 정의를 Geometry 만 사용하도록 변경하십시오.

실행하기 전에 항상 자동 생성 스크립트를 검토해야합니다. 심지어 스크립트에 이렇게 말하는 주석이 있습니다.

관련 문제