移行する
データベースの初期化
すべての例は、すでにデータベースがあることを前提としていることに注意してください。
これが当てはまらず、テーブルを作成する必要がある場合は、ormarがsqlalchemyを使用してベーステーブルを構築するため、非常に簡単です。
以下のサンプルのようにcreate_all()を呼び出すだけです。
| sqlalchemyをインポート
#sqlalchemy形式でデータベースURLを取得する-モデル定義で使用されるデータベースインスタンスと同じ
engine=sqlalchemy. create_engine("sqlite:///test.db")
#これは、ormar Models定義で使用されるのと同じメタデータである必要があることに注意してください。
metadata. create_all(エンジン)
|
また、ormar. ormar_configオブジェクトでsqlalchemyテーブルを公開する単一のテーブルを作成することもできます。
| sqlalchemyをインポート
#sqlalchemy形式でデータベースURLを取得する-モデル定義で使用されるデータベースインスタンスと同じ
engine=sqlalchemy. create_engine("sqlite:///test.db")
#Artistは以前の例からのormarモデルです
Artist. ormar_config.table.create(エンジン)
|
!!!警告テーブルは一度だけ作成する必要があるので、Pythonコンソールを使用するか、最初に使用した後に本番コードからスクリプトを削除してください。
蒸留器の使い方
テーブルと同様に、sqlalchemyに基づいてテーブルを移行するため、alembicを使用します。
初期化
コマンドラインを使用して、このシンプルな例を再現します。
| alembic in it alembic
alembicリビジョン--autoGeneration-m"いくつかの変更を加えました"
alembicアップグレードヘッド
|
サンプルenv.pyファイル
蒸留器の移行の簡単な例は次のようになります。
アプリケーションの構造は次のとおりです。
| ->アプリ
->alembic(初期化フォルダ-アプリフォルダ内でalembic in it alembicを実行)
->モデル(ここにモデルがあります)
->__in it__. py
->my_models.py
|
(alembicフォルダ内の)env.pyファイルは次のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 | logging. configからfileConfigをインポート
sqlalchemyからcreate_engineをインポート
alembicインポートコンテキストから
sys, osをインポート
#システムパスにアプリフォルダを追加する(代わりに、python-mを使用して親フォルダから実行することもできます。。。)
myPath=os. path.dirname(os.path.abspath(__ファイル__))
sys. path.insert(0,myPath+'/../../')
これはAlembic Configオブジェクトです。
#使用中の. iniファイル内の値へのアクセス。
config=context. config
Pythonログの設定ファイルを解釈します。
この行は基本的にロガーを設定します。
fileConfig(config. config_file_name)
#ここにモデルのMetaDataオブジェクトを追加します(ormarで使用されるもの)
'autoGeneration'のサポート
app. models.my_modelsからメタデータをインポート
target_metadata=メタデータ
#ここでURLを設定するか、設定からインポートする
#デフォルトでは、URLはalembic. iniファイルに保存されたsqlachemy.url変数にあることに注意してください。
URL="sqlite:///test. db"
def run_Migrations_off line():
「オフライン」モードでマイグレーションを実行します。
これは、URLだけでコンテキストを構成します。
エンジンではありませんが、エンジンは受け入れられます
ここではwell.Byエンジンの作成をスキップします
DB APIが利用可能である必要はありません。
ここでcontext. execute()を呼び出し、指定された文字列を
スクリプト出力。
"""
context. configure(コンフィギュア)
url=URL,
target_metadata=ターゲットメタデータ
リテラルバインド=True,
dialect_opts={"paramstyle": "named"}、
#UUIDフィールドを使用する場合は、このパラメータも設定します。
#プレフィックスは、alembicのsqlalchemyインポート名と一致する必要があります。
#sqlalchemy_module_prefixオプションで設定できる(デフォルトは'sa.')
user_module_prefix='sa.'
)
context. start_トランザクション()を使用して:
context. run_Migrations()
def run_Migrations_on line():
「オンライン」モードで移行を実行します。
このシナリオでは、エンジンを作成する必要があります。
そして、文脈とのつながりを関連付けます。
"""
接続可能=create_engine(URL)
Connectable. connect()を接続として使用します:
context. configure(コンフィギュア)
connection=connection、
target_metadata=ターゲットメタデータ
#UUIDフィールドを使用する場合は、このパラメータも設定します。
#プレフィックスは、alembicのsqlalchemyインポート名と一致する必要があります。
#sqlalchemy_module_prefixオプションで設定できる(デフォルトは'sa.')
user_module_prefix='sa.'
)
context. start_トランザクション()を使用して:
context. run_Migrations()
if context. is_off line_mode():
移行をオフラインで実行()
その他:
ラン_マイグレーション_オンライン()
|
除外フォーム
context. configureに渡されたinclude_objectパラメータを使用して、特定のテーブルをインクルード/除外することもできます。これは、指定されたオブジェクトに対してTrue/Falseを返す関数である必要があります。
サンプル関数は、data_jobでない限り、名前がdata_で始まるテーブルを除外します。
| def include_object(object, name,type_,反映,比較_to):
if name and name. startswith('data_')and name not in['data_job']:
return False
return True
|
!!!注意include_objectの関数パラメータ(名前を変更できる)が必要で、alembicで定義して、その役割を確認してください。alembicドキュメントを確認してください
次に、コンテキスト(オンラインとオフライン)に渡します。
| context. configure(コンフィギュア)
url=URL,
target_metadata=ターゲットメタデータ
リテラルバインド=True,
dialect_opts={"paramstyle": "named"}、
user_module_prefix='sa.',
インクルードオブジェクト
)
|
!!!テーブルの作成、変更、および移行の詳細については、sqlalchemyテーブル作成ドキュメントを参照してください。