私はすでに同様の質問をしてきましたが、私はそれを言い換えることができたかもしれません。Flask-SQLAlchemyの同じデータベース
このような(私が見た別の質問のとおり)現在、私は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()
を次にそれが第二のデータベースから結果を取得します。 SubTableクラスの場所を切り替えると、結果は同じです(明快にするために編集:バインドが最後に定義されたものから結果が得られることを意味します。現在のように 'bind1'ではなく 'bind2')。私は本当に何をすべきかわからないので、もしあなたが何かを助けることができればそれはすばらしいでしょう。
ありがとうございました。
編集:これを行うには不可能な場合(または、より良い方法や異なる方法を知っている場合)、私にお知らせください。私は2つの異なるdbオブジェクトを持つような何かをすることができれば、それも良いでしょう、私はちょうどそれを行う方法やどのような影響があるのか分かりません。
編集2:これを数時間、数時間トールした後、私はついにこれを行う方法について結論に至りました。 __init__.pyで
:models.pyで
db1 = SQLAlchemy(app)
db2 = SQLAlchemy(app)
:
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)
このナンセンス理由はバインドが一度だけ定義し、変更しないことができるということではありませんし、どの2人のテーブル名バインドが異なる場合であっても同じである可能性があります。したがって、2つのMetaDataインスタンスを作成する必要があります。そうしないと、SQLAlchemyが怒ってしまいます。だから、問題はSQLAlchemyの制限だと分かります。