私はすでに同様の質問をしましたが、おそらくそれを言い換えるか、ここで何が起こっているのかを明らかにするためにさらに何をしたかを示すことができると思いました.
現在、私は2つの同一のデータベースを持っており、次のように(私が見た別の質問に従って)問題を解決しようとしました:
class BaseTable(db.Model):
__tablename__ = 'TableName'
col = db.Column(db.Integer)
class SubTable1(BaseTable):
__bind_key__ = 'bind1'
class SubTable2(BaseTable):
__bind_key__ = 'bind2'
これに関する問題は、最新のバインドがどこでも使用されるようになったため、別の場所でこれを行うと:
SubTable1.query.filter_by(col=12).all()
次に、2 番目のデータベースから結果を取得します。SubTable クラスの場所を切り替えた場合、結果は同じです (明確にするために編集: つまり、最後に定義されたバインドから結果が得られることを意味します。現在の「bind1」ではなく「bind2」)。どうすればいいのかわからないので、少しでもお役に立てれば幸いです。
ありがとう。
編集:これを行うことが不可能な場合(または、単により良い方法または別の方法を知っている場合)、私に知らせてください. 2つの異なるdbオブジェクトを持つようなことができれば、それも良いでしょう.それを行う方法や、それがどのような影響を与えるかは本当にわかりません.
EDIT 2:これで何時間も苦労した後、私は最終的にこれを行う方法について結論に達しました.
__init__.py で:
db1 = SQLAlchemy(app)
db2 = SQLAlchemy(app)
models.py で:
class Table1(db1.Model):
__tablename__ = 'TableName'
__bind_key__ = 'bind1'
col = db1.Column(db1.Integer)
class Table2(db2.Model):
__tablename__ = 'TableName'
__bind_key__ = 'bind2'
col = db2.Column(db2.Integer)
このナンセンスな理由は、バインドは 1 回しか定義できず、変更できないためです。また、バインドが異なっていても、2 つのテーブル名が同じであってはなりません。したがって、2 つの MetaData インスタンスを作成する必要があります。そうしないと、SQLAlchemy が怒ってしまいます。したがって、問題は SQLAlchemy の制限であることがわかりました。