2017-12-05 18 views
1

오늘 Flask-Migrate를 사용하여 테스트 프로젝트에 설치했습니다. 단계 재현CommandError : Flask-Migrate를 사용하여 이전 할 때 '...'으로 식별 된 개정판을 찾을 수 없습니다.

alembic.util.exc.CommandError: Can't locate revision identified by 'e39d16e62810'

:

  1. 실행 "파이썬 create_db.py"
  2. 실행 "플라스크 DB 초기화"
  3. 열 "이름을 추가 그러나 나는 다음과 같은 오류를 얻고있다 "to Entry-model
  4. 실행"flask db 이동 "

편집 : migrations 디렉토리를 제거한 후 프로세스를 반복하면 "flask db migrate"를 실행 한 후에 같은 오류가 발생합니다. 는 또한 플라스크 스크립트와 manage.py 파일을 사용하여 시도 -> 같은 문제가

오류 :

(venv_mentz) H:\Flask-API-Test>python manage.py db migrate 
INFO [alembic.runtime.migration] Context impl SQLiteImpl. 
INFO [alembic.runtime.migration] Will assume non-transactional DDL. 
Traceback (most recent call last): 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\base.py", line 143, in _catch_revision_errors 
    yield 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\base.py", line 206, in get_revisions 
    return self.revision_map.get_revisions(id_) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\revision.py", line 299, in get_revisions 
    return sum([self.get_revisions(id_elem) for id_elem in id_],()) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\revision.py", line 299, in <listcomp> 
    return sum([self.get_revisions(id_elem) for id_elem in id_],()) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\revision.py", line 304, in get_revisions 
    for rev_id in resolved_id) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\revision.py", line 304, in <genexpr> 
    for rev_id in resolved_id) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\revision.py", line 362, in _revision_for_ident 
    resolved_id) 
alembic.script.revision.ResolutionError: No such revision or branch 'e39d16e62810' 

The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "manage.py", line 14, in <module> 
    manager.run() 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\flask_script\__init__.py", line 417, in run 
    result = self.handle(argv[0], argv[1:]) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\flask_script\__init__.py", line 386, in handle 
    res = handle(*args, **config) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\flask_script\commands.py", line 216, in __call__ 
    return self.run(*args, **kwargs) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\flask_migrate\__init__.py", line 197, in migrate 
    version_path=version_path, rev_id=rev_id) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\command.py", line 176, in revision 
    script_directory.run_env() 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\base.py", line 425, in run_env 
    util.load_python_file(self.dir, 'env.py') 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\util\pyfiles.py", line 81, in load_python_file 
    module = load_module_py(module_id, path) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\util\compat.py", line 83, in load_module_py 
    spec.loader.exec_module(module) 
    File "<frozen importlib._bootstrap_external>", line 678, in exec_module 
    File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed 
    File "migrations\env.py", line 87, in <module> 
    run_migrations_online() 
    File "migrations\env.py", line 80, in run_migrations_online 
    context.run_migrations() 
    File "<string>", line 8, in run_migrations 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\runtime\environment.py", line 836, in run_migrations 
    self.get_context().run_migrations(**kw) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\runtime\migration.py", line 321, in run_migrations 
    for step in self._migrations_fn(heads, self): 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\command.py", line 156, in retrieve_migrations 
    revision_context.run_autogenerate(rev, context) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\autogenerate\api.py", line 415, in run_autogenerate 
    self._run_environment(rev, migration_context, True) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\autogenerate\api.py", line 425, in _run_environment 
    if set(self.script_directory.get_revisions(rev)) != \ 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\base.py", line 206, in get_revisions 
    return self.revision_map.get_revisions(id_) 
    File "c:\users\marschall\appdata\local\programs\python\python36-32\Lib\contextlib.py", line 100, in __exit__ 
    self.gen.throw(type, value, traceback) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\base.py", line 174, in _catch_revision_errors 
    compat.raise_from_cause(util.CommandError(resolution)) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\util\compat.py", line 194, in raise_from_cause 
    reraise(type(exception), exception, tb=exc_tb, cause=exc_value) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\util\compat.py", line 187, in reraise 
    raise value.with_traceback(tb) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\base.py", line 143, in _catch_revision_errors 
    yield 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\base.py", line 206, in get_revisions 
    return self.revision_map.get_revisions(id_) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\revision.py", line 299, in get_revisions 
    return sum([self.get_revisions(id_elem) for id_elem in id_],()) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\revision.py", line 299, in <listcomp> 
    return sum([self.get_revisions(id_elem) for id_elem in id_],()) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\revision.py", line 304, in get_revisions 
    for rev_id in resolved_id) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\revision.py", line 304, in <genexpr> 
    for rev_id in resolved_id) 
    File "H:\Flask-API-Test\venv_mentz\lib\site-packages\alembic\script\revision.py", line 362, in _revision_for_ident 
    resolved_id) 
alembic.util.exc.CommandError: Can't locate revision identified by 'e39d16e62810' 

내 파일 구조는 다음과 같습니다

app 
-- views 
----- __init__.py 
----- main.py 
-- __init__.py 
-- config.py 
-- models.py 
instance 
-- __init__.py 
-- config.py 
create_db.py 
dev.db 
run.py 

내 앱 공장 :

from flask import Flask 
from instance.config import app_config 
from flask_migrate import Migrate 

def create_app(config_name): 
    """ Creates a runnable app. 
     This app will be using the config with name "config_name". 
    """ 
    app = Flask(__name__) 
    # Loading the the config from instance folder with name "config_name" 
    app.config.from_object(app_config[config_name]) 
    # Loading generic config from 'config.py' 
    app.config.from_pyfile('config.py') 

    # Registering this app at db 
    from app.models import db 
    db.init_app(app) 
    migrate = Migrate(app, db) 

    from app import models, views 

    return app 

내 run.py :

""" This script runs a the app with the given configuration. """ 

from app import create_app 

# Configuration used to run the app 
config_name = 'dev' 

# Creating the app by using the required configuration 
app = create_app(config_name) 

if __name__ == '__main__': 
    app.run() 

그리고 내 create_db.py 파일이 models.py를 사용하여 데이터베이스를 만들 수는 :

""" This script creates the database defined in app.models. """ 

from app import create_app 

app = create_app('dev') 
from app.models import db 

# Telling SQLAlchemy what app should be used as the database model 
with app.app_context(): 
    db.create_all() 

이 내 models.py입니다 :

from flask_sqlalchemy import SQLAlchemy 

db = SQLAlchemy() 

class Entry(db.Model): 
    __tablename__ = 'Entries' 
    layer_id = db.Column(db.Integer, primary_key=True) 

    def __repr__(self): 
     return "ID: {}; text: {}".format(self.layer_id, self.text) 
(210)

편집 : manage.py는 :

from flask_script import Manager 
from flask_migrate import Migrate, MigrateCommand 
from app import create_app 
from app import models 
from app.models import db 

app = create_app('dev') 
migrate = Migrate(app, db) 
manager = Manager(app) 

manager.add_command('db', MigrateCommand) 

if __name__ == '__main__': 
    manager.run() 
+0

응용 프로그램 디렉토리에 이전 폴더가 있는지 확인할 수 있습니까? –

+0

처음에는 마이그레이션 폴더가/없습니다. 그러나 "flask db init"을 실행할 때 생성됩니다. –

+1

'migrations' 디렉토리를 삭제하고 다시 전체 프로세스를 반복하십시오. 오류가 발생하면 질문에 대한 전체 출력과 함께 오류가 발생한 명령을 추가하십시오. – Miguel

답변

0

나는 해결책을 찾아 냈다. 내 실수 .... 데이터베이스 경로 잘못되었습니다. 어쨌든 고맙습니다.