gpt4 book ai didi

python - 使用 Flask-SQLAlchemy 实现多对多多数据库连接

转载 作者:太空狗 更新时间:2023-10-29 22:13:51 24 4
gpt4 key购买 nike

我正在尝试使这个多对多连接与 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 吗?我尝试设置另一个绑定(bind)到 main_db 并在关系表定义上设置 info={'bind_key': 'main_db'},但没有成功。谢谢!

最佳答案

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

希望这对其他人有帮助!

关于python - 使用 Flask-SQLAlchemy 实现多对多多数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11438352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com