2012-07-11 19 views
5

Próbuję doprowadzić do tego, że wiele z nich łączy pracę z Flask-SQLAlchemy i dwiema bazami danych MySQL, i jest bardzo blisko, z wyjątkiem użycia niewłaściwej bazy danych dla tabela łączenia. Oto podstawy ...Łączenie wielu baz danych z wieloma bazami danych za pomocą Flask-SQLAlchemy

Mam main_db i vendor_db. Tabele są skonfigurowane jako main_db.users, main_db.user_products (tabela relacji), a następnie vendor_db.products. Powinno być całkiem jasne, jak te wszystkie są połączone.

w moim app.py, jestem tworzeniu bazy baz danych tak:

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

definicje modelu są ustawione tak:

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

Problemem jest to, że gdy próbuję uzyskać produkty użytkownika, które próbują użyć vendor_db dla tabeli łączenia zamiast main_db. Jakieś pomysły, jak mogę to zrobić, zamiast tego użyć main_db? Próbowałem skonfigurować inne powiązanie z main_db i ustawienie info={'bind_key': 'main_db'} w definicji tabeli relacji, ale bez powodzenia. Dzięki!

Odpowiedz

10

Okazuje się, że to, co musiałem zrobić, to określić schemat w mojej definicji tabeli user_products_tbl. Tak więc,

Mam nadzieję, że to pomoże komuś innemu!

Powiązane problemy