【问题标题】:Many-to-many multi-database join with Flask-SQLAlchemy使用 Flask-SQLAlchemy 进行多对多多数据库连接
【发布时间】:2012-07-11 17:41:56
【问题描述】:

我正在尝试使这种多对多连接与 Flask-SQLAlchemy 和两个 MySQL 数据库一起工作,它非常接近,只是它为连接表使用了错误的数据库。这是基础知识...

我有 main_dbvendor_db。这些表设置为main_db.usersmain_db.user_products(关系表),然后是vendor_db.products。应该很清楚这些是如何连接的。

在我的 app.py 中,我正在这样设置数据库:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:pass@localhost/main_db'
app.config['SQLALCHEMY_BINDS'] = {
        'vendor_db': 'mysql://user:pass@localhost/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))

问题是,当我尝试获取用户的产品时,它会尝试使用 vendor_db 而不是 main_db 作为连接表。有什么想法可以让它改用main_db吗?我尝试设置另一个绑定到main_db 并在关系表定义上设置info={'bind_key': 'main_db'},但没有运气。谢谢!

【问题讨论】:

    标签: python sqlalchemy flask flask-sqlalchemy


    【解决方案1】:

    原来我需要在这里做的是在我的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'
    )
    

    希望这对其他人有帮助!

    【讨论】:

      猜你喜欢
      • 2020-08-07
      • 2016-08-21
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      相关资源
      最近更新 更多