2012-07-11 27 views
5

Sto provando a far funzionare questo join molti-a-molti con Flask-SQLAlchemy e due database MySQL, ed è molto vicino tranne che sta usando il database sbagliato per la tabella di join. Ecco le basi ...Join multi-database molti-a-molti con Flask-SQLAlchemy

Ho main_db e vendor_db. Le tabelle sono impostate come main_db.users, main_db.user_products (la tabella delle relazioni) e quindi vendor_db.products. Dovrebbe essere abbastanza chiaro come siano tutti collegati.

nel mio app.py, sto seting il backup dei database in questo modo:

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

definizioni del modello sono impostati in questo modo:

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

Il problema è che quando cerco di ottenere prodotti di un utente che sta cercando di utilizzare vendor_db per la tabella di join anziché main_db. Qualche idea su come posso farlo usare invece main_db? Ho provato a impostare un altro binding su main_db e l'impostazione info={'bind_key': 'main_db'} sulla definizione della tabella delle relazioni, ma senza fortuna. Grazie!

risposta

10

Scopre che cosa dovevo fare qui era specificare lo schema nella mia definizione di tabella user_products_tbl. Quindi,

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

Spero che questo aiuti qualcun altro!