2012-07-11 33 views
5

Tôi đang cố gắng thực hiện công việc nối kết nhiều người này với Flask-SQLAlchemy và hai cơ sở dữ liệu MySQL, và nó rất gần, ngoại trừ việc sử dụng cơ sở dữ liệu sai bảng tham gia. Dưới đây là thông tin cơ bản ...Multi-to-many multi-database tham gia với Flask-SQLAlchemy

Tôi có main_dbvendor_db. Các bảng được thiết lập là main_db.users, main_db.user_products (bảng quan hệ), và sau đó vendor_db.products. Nên được khá rõ ràng như thế nào tất cả những người được kết nối.

trong app.py của tôi, tôi seting lên cơ sở dữ liệu như thế này:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:[email protected]/main_db' 
app.config['SQLALCHEMY_BINDS'] = { 
     'vendor_db': 'mysql://user:[email protected]/vendor_db' 
} 

định nghĩa mẫu được thiết lập như thế này:

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

Vấn đề là khi tôi cố gắng lấy sản phẩm của người dùng, nó đang cố gắng sử dụng vendor_db cho bảng kết hợp thay vì main_db. Bất kỳ ý tưởng làm thế nào tôi có thể làm cho nó sử dụng main_db thay thế? Tôi đã thử thiết lập một liên kết khác với main_db và đặt info={'bind_key': 'main_db'} trên định nghĩa bảng quan hệ, nhưng không có may mắn. Cảm ơn!

Trả lời

10

Hoá ra những gì tôi cần làm ở đây là chỉ định giản đồ trong định nghĩa bảng user_products_tbl của tôi. Vì vậy,

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

Hy vọng điều này sẽ giúp người khác!