2017-09-05 62 views
0

項目藥結構(僅適用於DB遷移目錄)問題:爲什麼我有一個蒸餾器遷移

--db_manage: 
    alembic.ini 
    --alembic: 
    env.py 
    script.py.mako 
    README 
    --versions: 
     #migration files 

當我嘗試運行命令:python db_manage/alembic/env.py,我有反應,如:

Traceback (most recent call last): 
    File "db_manage/alembic/env.py", line 8, in <module> 
    config = context.config 
AttributeError: module 'alembic.context' has no attribute 'config' 

在哪種情況下我有這個問題?
P.S.
文件alembic.ini

# A generic, single database configuration. 

[alembic] 
# path to migration scripts 
script_location = alembic 

# template used to generate migration files 
# file_template = %%(rev)s_%%(slug)s 

# max length of characters to apply to the 
# "slug" field 
#truncate_slug_length = 40 

# set to 'true' to run the environment during 
# the 'revision' command, regardless of autogenerate 
# revision_environment = false 

# set to 'true' to allow .pyc and .pyo files without 
# a source .py file to be detected as revisions in the 
# versions/ directory 
# sourceless = false 

# version location specification; this defaults 
# to numus/versions. When using multiple version 
# directories, initial revisions must be specified with --version-path 
# version_locations = %(here)s/bar %(here)s/bat numus/versions 

# the output encoding used when revision files 
# are written from script.py.mako 
# output_encoding = utf-8 

sqlalchemy.url = postgresql://test:[email protected]/test 


# Logging configuration 
[loggers] 
keys = root,sqlalchemy,alembic 

[handlers] 
keys = console 

[formatters] 
keys = generic 

[logger_root] 
level = WARN 
handlers = console 
qualname = 

[logger_sqlalchemy] 
level = WARN 
handlers = 
qualname = sqlalchemy.engine 

[logger_alembic] 
level = INFO 
handlers = 
qualname = alembic 

[handler_console] 
class = StreamHandler 
args = (sys.stderr,) 
level = NOTSET 
formatter = generic 

[formatter_generic] 
format = %(levelname)-5.5s [%(name)s] %(message)s 
datefmt = %H:%M:%S 

文件env.py

from __future__ import with_statement 
from alembic import context 
from sqlalchemy import engine_from_config, pool 
from logging.config import fileConfig 

# this is the Alembic Config object, which provides 
# access to the values within the .ini file in use. 
config = context.config 

# Interpret the config file for Python logging. 
# This line sets up loggers basically. 
fileConfig(config.config_file_name) 

# add your model's MetaData object here 
# for 'autogenerate' support 
# from myapp import mymodel 
# target_metadata = mymodel.Base.metadata 
target_metadata = None 

# other values from the config, defined by the needs of env.py, 
# can be acquired: 
# my_important_option = config.get_main_option("my_important_option") 
# ... etc. 


def run_migrations_offline(): 
    """Run migrations in 'offline' mode. 

    This configures the context with just a URL 
    and not an Engine, though an Engine is acceptable 
    here as well. By skipping the Engine creation 
    we don't even need a DBAPI to be available. 

    Calls to context.execute() here emit the given string to the 
    script output. 

    """ 
    url = config.get_main_option("sqlalchemy.url") 
    context.configure(
     url=url, target_metadata=target_metadata, literal_binds=True) 

    with context.begin_transaction(): 
     context.run_migrations() 


def run_migrations_online(): 
    """Run migrations in 'online' mode. 

    In this scenario we need to create an Engine 
    and associate a connection with the context. 

    """ 
    connectable = engine_from_config(
     config.get_section(config.config_ini_section), 
     prefix='sqlalchemy.', 
     poolclass=pool.NullPool) 

    with connectable.connect() as connection: 
     context.configure(
      connection=connection, 
      target_metadata=target_metadata 
     ) 

     with context.begin_transaction(): 
      context.run_migrations() 

if context.is_offline_mode(): 
    run_migrations_offline() 
else: 
    run_migrations_online() 
+0

嘗試'蟒蛇db_manage /蒸餾器/ env.py --autogenerate' – Mekicha

+0

@Mekicha沒有什麼改變,相同的輸出 – Klimenkomud

+0

它會顯得你從不同的目錄,其中運行命令你的' alembic.ini'居住。嘗試使用'-c'或'--config'顯式傳遞它,如'alembic --config db_manage/alembic.ini ...'中一樣。不知道這是否是根本原因,但值得一試。 –

回答

1

有兩件事情錯在你嘗試調用遷移工具的方式。首先,您應該使用alembic腳本,而不是試圖直接運行env.py。從tutorial

env.py - 這是一個運行每當蒸餾器遷移工具調用 Python腳本。它至少包含配置和生成SQLAlchemy引擎的指令,從該引擎和事務獲取連接,然後調用遷移引擎,將連接作爲數據庫連接的來源。

其次,雖然你可以保持您alembic.ini無論走到哪裏,默認行爲是看在當前目錄:

蒸餾器放在一個文件alembic.ini到當前目錄。這是一個alembic腳本被調用時查找的文件。該文件可以位於任何地方,可以在通常調用alembic腳本的相同目錄中,或者在不同的目錄中,可以使用alembic跑步者的--config選項來指定。

所以如果是持有其他地方,必須指示蒸餾器有關使用-c,或--config,開關的位置。例如:

alembic --config db_manage/alembic.ini 
+0

它可以幫助我很多,但是現在我遇到了一個新問題:我的憑據錯了,當我嘗試運行'alembic upgrade head'時,它告訴我我的數據庫密碼是錯誤的。在哪個地方我可以改變它?附:對不起,愚蠢的問題,我是新的python,並嘗試建立現有的項目。 – Klimenkomud

+0

'sqlalchemy。'alembic.ini'中的網址是處理這個問題的地方。如果需要,還要檢查你的Postgresql配置是否允許['pg_hba.conf'](https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html)中需要的認證方法。是。 –

+0

是的,找到它,非常感謝!所有工作 – Klimenkomud

相關問題