2012-07-11 3 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)) 

문제는 그 내가하려고 할 때 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' 
) 

희망이 있으면 다른 사람에게 도움이됩니다.