2017-09-05 21 views
0

プロジェクトstructue(DB移行でのみディレクトリ)に問題がなかったですどのような場合、私はその問題がありますか?
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

てみ 'のpython db_manage /アレンビック/ env.py --autogenerate' – Mekicha

+0

@Mekicha何も、同じ出力 – Klimenkomud

+0

を変更していないあなたの'よりも別のディレクトリからコマンドを実行しているように見えると思いますalembic.ini'が存在します。 'alembic --config db_manage/alembic.ini ...'のように '-c'や' --config'を使って明示的に渡してみてください。これが根本的な原因であるかどうかはわかりませんが、試してみる価値があります。 –

答えて

1

あなたが移行ツールを起動しようとする方法で間違っ2つのものがあります。まず、env.pyを直接実行するのではなく、alembicスクリプトを使用する必要があります。 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'を実行しようとすると自分のDBパスワードが間違っていると教えています。私はそれをどこで変えることができますか? P.S.愚かな質問を申し訳ありません。私はPythonで新しく、既存のプロジェクトを設定しようとしています。 – Klimenkomud

+0

'sqlalchemyです。'alembic.ini'のurlはそれを扱う場所です。必要に応じて、Postgresqlの設定で必要な認証方法が['pg_hba.conf'](https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html)で許可されていることを確認してくださいさあ。 –

+0

うん、それを見つけて、ありがとう!すべてが機能している – Klimenkomud

関連する問題