2016-05-08 8 views
1

Flaskアプリケーションを構築しています。起動時に、それぞれが同じスキーマを持ついくつかのtsvファイルを読み込む必要があります各ファイルに1つずつ)、ユーザーは照会する表/ファイルといくつかのキーを指定します。SQLalchemy:複数のテーブルを1つのスキーマにして、起動時にテーブルを動的に作成する

私はこれを行う方法がわかりませんが、一番良い方法は1つのスキーマを指定し、アプリが起動するとファイルを読み込んで各ファイルのテーブルを動的に作成することです。私は、SQLalchemyのドキュメントのどこにも、同じスキーマを複数回使用する方法については言及していません。おそらく、私はスキーマクラスを拡張する必要がありますが、私は起動時にこれを行う方法がわかりません。

ありがとうございます!

- EDIT -

これは私の質問の半分に答えるように見えます: Flask-SQLAlchemy. Create several tables with all fields identical

だから私の質問は今:あなたは上記のフラスコ内で行うことができ、あなたのようにそれを行うことができますアプリが始まる?

答えて

2

2つのアプローチがあります。

  1. サブクラス化 - あなたは、スキーマのためのベースミックスインを作成し、各具体的なテーブルのためにそれをサブクラス化。このアプローチは、将来、異なるテーブルのスキーマが分岐する可能性がある場合に便利です。新しいフィールドを1つのテーブルに追加する必要がある場合は、サブクラスでのみ追加できます。 (変数DBは、モデルなどがflask sqlalchemy quickstartから使用されている)

    class BaseMixin(object): 
        name = db.Column(String(80), unique=True) 
        field2 = db.Column ... 
    
    class SubClass1(BaseMixin, db.Model)   
        pass 
    
    class Subclass2(BaseMixin, db.Model) 
        additional_field_for_subclass2 = db.Column(... 
        pass 
    
  2. 共通のテーブルには、すべてのについて - あなたはスキーマは、すべてのテーブルに同じままであることを確信している場合。私はあなたのすべてのデータのための1つのテーブルを作成することをお勧めします。data_sourceこれは、行/データの出所を示します。

    class CommonTable(db.Model): 
        data_source = db.Column(String(100) ..) 
        field1 = ... 
        field2 = ... 
    
+0

私はまだこれらの各クラスは何をすべきかについて少し困惑しています。ここの敷物の下にはたくさんの魔法が置かれています。最も重要なのは、テーブルを表す可能性のあるクラスを定義するのではなく、起動時にテーブルを操作する方法(新しいテーブルを作成する、古いテーブルを削除するなど)がわかりません。 –

+0

各サブクラスは1つのファイル/テーブルを表します。ファイル1から1行を読み込み、Subclass1()のオブジェクトを作成する必要があります。その後、このオブジェクトをsession.add()およびsession.commitを使用してデータベースに保存できます。 – aviator

関連する問題