2012-07-11 75 views
5

我想使這個多對多的聯接工作與Flask-SQLAlchemy和兩個MySQL數據庫,它是非常接近,除非它使用錯誤的數據庫連接表。這裏的基本知識...多對多多數據庫加入Flask-SQLAlchemy

我有main_dbvendor_db。這些表設置爲main_db.users,main_db.user_products(關係表),然後設置爲vendor_db.products。應該很清楚這些都是如何連接的。

在我app.py

,我塞汀了數據庫這樣的:

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)) 

的問題是,當我嘗試獲取用戶的產品,它試圖使用vendor_db作爲連接表而不是main_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' 
) 

希望這可以幫助別人!