2012-07-11 14 views
5

Flask-SQLAlchemyと2つのMySQLデータベースとの多対多結合を作成しようとしていますが、間違ったデータベースジョインテーブルここに基本があります...Flask-SQLAlchemyを使用した多対多データベースの結合

私はmain_dbvendor_dbを持っています。テーブルはmain_db.users,main_db.user_products(リレーションテーブル)、次にvendor_db.productsと設定されています。それらがどのように結びついているかを明確にすべきです。私app.pyで

、私はこのようなデータベースをアップSETINGだ:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:[email protected]/main_db' 
app.config['SQLALCHEMY_BINDS'] = { 
     'vendor_db': 'mysql://user:[email protected]/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)) 

問題は、私がしようとするということですmain_dbではなく、結合テーブルにvendor_dbを使用しようとしているユーザーの製品を入手してください。どのように私はそれを代わりにmain_dbを使用することができます任意のアイデアですか?私はmain_dbに別のバインドを設定しようとしましたが、関係テーブル定義でinfo={'bind_key': 'main_db'}を設定しましたが、運はありません。ありがとう!

答えて

10

ここで必要なことは、user_products_tblテーブル定義でスキーマを指定していたことです。したがって、

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')), 
     schema='main_db' 
) 

これは他の人に役立つことを望みます。

関連する問題