6

フラスコの「アプリケーション ファクトリ」パターンを使用しようとしていますが、モデルにニワトリが先か卵が先かという問題があるようです。http://flask.pocoo.org/docs/patterns/appfactories/

モデルをインポートする create_app 関数でビューをインポートしています。そのため、モデルが定義されているときにアプリに構成がありません。これは通常は問題ありません。バインド キーを使用して、異なるデータベースに接続するようにモデルを設定できます。

ただし、この場合、1 つは既定のデータベースから、もう 1 つは別のデータベース接続にある 2 つのモデル セットがあり、データベース間で結合したいと考えています。通常の方法は追加することです

__table_args__ = { 'schema' : 'other_db_name' }

私の「他のデータベース」モデルに。

しかし...設定によっては、「other_db_name」が異なる場合があります。

そのため、構成からのスキーマ名を必要とするモデルが定義されていますが、クラス定義に入れる構成からのスキーマはありません。また、私が気付いていなかったフラスコに何かが欠けているだけかもしれません。

(補足-これを簡単に修正するには、Sqlalchemyを構成して、何があっても常にクエリにスキーマ名を出力するようにします-しかし、この設定が見つからないようです。)

誰かがこれについて意見を持っているなら、私は非常に義務付けられています. ありがとう!

4

1 に答える 1

5

これを自分で試したことはありませんが__table_args__declared_attr.

from sqlalchemy.ext.declarative import declared_attr

class MyModel(MySQLSettings, MyOtherMixin, Base):
    __tablename__='my_model'

    @declared_attr
    def __table_args__(cls):
        return { 'schema': current_app.config['OTHER_DB_NAME'] }
于 2013-08-27T01:20:14.020 に答える