2017-09-28 3 views
0

나는 alembic에서 일부 마이그레이션을 수행하고 alembic upgrade head을 최신 버전의 DB로 수정하려고 시도하지만 일부 경우 이미 테이블이 있으므로 오류가 발생합니다.일부 테이블이있을 때 Alembic 마이그레이션

alembic upgrade head 
INFO [alembic.runtime.migration] Context impl PostgresqlImpl. 
INFO [alembic.runtime.migration] Will assume transactional DDL. 
INFO [alembic.runtime.migration] Running upgrade -> 3137cf88d8c6, create tables 
Traceback (most recent call last): 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context 
    context) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute 
    cursor.execute(statement, parameters) 
psycopg2.ProgrammingError: relation "City" already exists 


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

Traceback (most recent call last): 
    File "/home/toweya/.virtualenvs/numus3/bin/alembic", line 11, in <module> 
    sys.exit(main()) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/config.py", line 479, in main 
    CommandLine(prog=prog).main(argv=argv) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/config.py", line 473, in main 
    self.run_cmd(cfg, options) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/config.py", line 456, in run_cmd 
    **dict((k, getattr(options, k, None)) for k in kwarg) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/command.py", line 254, in upgrade 
    script.run_env() 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/script/base.py", line 416, in run_env 
    util.load_python_file(self.dir, 'env.py') 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/util/pyfiles.py", line 93, in load_python_file 
    module = load_module_py(module_id, path) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/util/compat.py", line 64, in load_module_py 
    module_id, path).load_module(module_id) 
    File "<frozen importlib._bootstrap_external>", line 388, in _check_name_wrapper 
    File "<frozen importlib._bootstrap_external>", line 809, in load_module 
    File "<frozen importlib._bootstrap_external>", line 668, in load_module 
    File "<frozen importlib._bootstrap>", line 268, in _load_module_shim 
    File "<frozen importlib._bootstrap>", line 693, in _load 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 665, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "numus/env.py", line 68, in <module> 
    run_migrations_online() 
    File "numus/env.py", line 63, in run_migrations_online 
    context.run_migrations() 
    File "<string>", line 8, in run_migrations 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/runtime/environment.py", line 817, in run_migrations 
    self.get_context().run_migrations(**kw) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/runtime/migration.py", line 323, in run_migrations 
    step.migration_fn(**kw) 
    File "/home/toweya/PycharmProjects/NumusPortal/portal/db_manage/numus/versions/3137cf88d8c6_create_tables.py", line 30, in upgrade 
    sa.Column('name', sa.String(64), nullable=False), 
    File "<string>", line 8, in create_table 
    File "<string>", line 3, in create_table 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/operations/ops.py", line 1106, in create_table 
    return operations.invoke(op) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/operations/base.py", line 318, in invoke 
    return fn(self, operation) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/operations/toimpl.py", line 101, in create_table 
    operations.impl.create_table(table) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/ddl/impl.py", line 194, in create_table 
    self._exec(schema.CreateTable(table)) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/alembic/ddl/impl.py", line 118, in _exec 
    return conn.execute(construct, *multiparams, **params) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 945, in execute 
    return meth(self, multiparams, params) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/sqlalchemy/sql/ddl.py", line 68, in _execute_on_connection 
    return connection._execute_ddl(self, multiparams, params) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1002, in _execute_ddl 
    compiled 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context 
    context) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1393, in _handle_dbapi_exception 
    exc_info 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause 
    reraise(type(exception), exception, tb=exc_tb, cause=cause) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 186, in reraise 
    raise value.with_traceback(tb) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context 
    context) 
    File "/home/toweya/.virtualenvs/numus3/lib/python3.5/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute 
    cursor.execute(statement, parameters) 
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) relation "City" already exists 
[SQL: '\nCREATE TABLE "City" (\n\tid SERIAL NOT NULL, \n\tgeoid INTEGER NOT NULL, \n\tname VARCHAR(64) NOT NULL, \n\tPRIMARY KEY (id), \n\tUNIQUE (geoid)\n)\n\n'] 

어떻게 기존 테이블을 무시할 수 있습니까? 계속하지만 당신은 당신의 마이그레이션/버전 floder 또는 증류기에 갈 필요가

+0

마이그레이션의 마이그레이션 floder 경로는 무엇입니까? –

+0

그 이름은 alembic이 아니지만'alembic.ini'에서 지정했습니다. 그것은 중요한가? – Klimenkomud

+0

마이 그 레이션 스크립트가 마이 그 레이션/버전 –

답변

0

중단하지 - 테이블이 존재하는 경우 :

/path/to/prooject/alembic/versions/3137cf88d8c6.py 

하고 스크립트를 제거하여 마지막 마이그레이션 스크립트를 편집을 같은 의미
업그레이드 기능에서 테이블을 생성하고 동일한 스크립트에서 다운 그레이드 기능에서 역 태스크를 제거합니다.

으로는 flask migrate에서 말했다 :

The migration script needs to be reviewed and edited

그리고 alembic에서이 인용 :

We review and modify these by hand as needed, then proceed normally.

+0

마이 그 레이션을 확인하십시오. 나는 많은 스크립트를 마이 그 레이션하고 있으므로 많은 시간이 걸릴 것입니다. 난 그냥 알고 싶어 : 그것은 테이블을 이미 존재하는 경우, 마이 그 레이션을 무시할 수 있습니까? – Klimenkomud

+0

유일한 방법은 마이그레이션 스크립트를 사용하는 것입니다. 마이그레이션 스크립트에 대한 질문에 따르면 3137cf88d8c6.py입니다. –

관련 문제