Estoy tratando de hacer que este muchos-a-muchos trabajen con Flask-SQLAlchemy y dos bases de datos MySQL, y está muy cerca excepto que está usando la base de datos incorrecta la mesa de unión. Aquí está lo básico ...Muchos-a-muchos multi-base de datos se unen con Flask-SQLAlchemy
Tengo main_db
y vendor_db
. Las tablas se configuran como main_db.users
, main_db.user_products
(la tabla de relaciones) y luego vendor_db.products
. Debería ser bastante claro cómo están todos conectados.
en mi app.py, estoy servido para su creación las bases de datos de la siguiente manera:
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:[email protected]/main_db'
app.config['SQLALCHEMY_BINDS'] = {
'vendor_db': 'mysql://user:[email protected]/vendor_db'
}
las definiciones del modelo se establecen así:
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))
El problema es que cuando intento obtener los productos de un usuario que está tratando de usar vendor_db
para la tabla de unión en lugar de main_db
. ¿Alguna idea de cómo puedo hacer que use main_db
? Intenté configurar otro enlace a main_db
y estableciendo info={'bind_key': 'main_db'}
en la definición de la tabla de relaciones, pero no tuve suerte. ¡Gracias!