2014-01-20 9 views
8

私は、タイトルに暗示されているトピックとちょっと混乱しています。Flask-SQLAlchemy - テーブル/データベースはいつ作成され、破棄されますか?

Flaskアプリを起動すると、SQLAlchemyはSQLALCHEMY_DATABASE_URIを検索しますが、私の場合はMySQLデータベースです。そして、すでに存在していなければテーブルを作成しますか?

config.pyファイル内のSQLALCHEMY_DATABASE_URI変数にプログラムされたデータベースが存在しない場合はどうなりますか?

データベースが存在し、そのテーブルがほんのわずかである(SQLAlchemyコードに実際のMySQLデータベースに存在するテーブルより多くのテーブルが存在する)場合はどうなりますか?それらのテーブルを消去して、現在の仕様で新しいテーブルを作成しますか?

これらのテーブルがすべて存在する場合はどうなりますか?彼らは消去され、再作成されますか?

私は、(1)スキーマに変更が加えられたときにデータベース情報を失わないように、プロセス全体の仕組みを理解しようとしています。(2)方法とタイミングを完全に管理するために、 SQLAlchemyは実際のデータベースと会話します。

答えて

10

テーブルは自動的に作成されません。あなたは明示的にそれはあなたのためにテーブルを作成するために持っているためにSQLAlchemy.create_all() methodを呼び出す必要があります:

db = SQLAlchemy(app) 
db.create_all() 

あなたは、たとえば、コマンドラインユーティリティでこれを行うことができます。または、Google App EngineなどのPaaSにデプロイする場合は、専用の管理者専用のビューです。

データベーステーブルの破壊にも同じことが言えます。 SQLAlchemy.drop_all() methodを使用してください。

Creating and Dropping tables chapter of the documentationを参照するか、database chapter of the Mega Flask Tutorialをご覧ください。

+0

私はこれらの方法に精通していますが、アプリ自体から呼び出すことはできませんか?同様に、アプリケーションの起動時に、そのデータベースが存在するかどうかを確認し、そうでない場合はcreate_allメソッドを呼び出すことができますか?メガチュートリアルでは、SQLiteを使用しています。つまり、データベースがあるかどうかをファイルで確認できます。それはMySQLで可能ですか? –

+0

@AlexChumbley:あなたは確かにそれを行うことができます。テーブルがリストされていないかどうかを検出し、 'create_all'を自動的に呼び出します。 –

+0

@AlexChumbley:私は現在、GAEアプリケーションで、 '/ admin'ルートを使用して、将来の移行サポートを目の当たりにして' create_tables'パートを呼び出せるようにしています。 –

関連する問題