この多対多の結合をFlask-SQLAlchemyと2つのMySQLデータベースで機能させようとしていますが、結合テーブルに間違ったデータベースを使用していることを除けば、非常に近いものです。これが基本です...
私が持っているmain_db
とvendor_db
。テーブルは、、(リレーションテーブル)、そして。として設定さmain_db.users
れmain_db.user_products
ますvendor_db.products
。それらがすべてどのように接続されているかをかなり明確にする必要があります。
私のapp.pyでは、次のようにデータベースを設定しています。
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:pass@localhost/main_db'
app.config['SQLALCHEMY_BINDS'] = {
'vendor_db': 'mysql://user:pass@localhost/vendor_db'
}
モデル定義は次のように設定されます。
from app import db
# Setup relationship
user_products_tbl = db.Table('user_products', db.metadata,
db.Column('user_id', db.Integer, db.ForeignKey('users.user_id')),
db.Column('product_id', db.Integer, db.ForeignKey('products.product_id'))
)
class User(db.Model):
__tablename__ = 'users'
id = db.Column('user_id', db.Integer, primary_key=True)
products = db.relationship("Product", secondary=user_products_tbl,
backref="users", lazy="dynamic")
class Product(db.Model):
__bind_key__ = 'vendor_db'
__tablename__ = 'products'
id = db.Column('product_id', db.Integer, primary_key=True)
name = db.Column(db.String(120))
問題は、ユーザーの製品を取得しようとするvendor_db
と、の代わりに結合テーブルに使用しようとしていることですmain_db
。main_db
代わりにどのように使用できるかについてのアイデアはありますか?別のバインドをmain_db
設定info={'bind_key': 'main_db'}
してリレーションシップテーブル定義を設定しようとしましたが、うまくいきませんでした。ありがとう!