jef*_*fff 6 python sqlalchemy flask flask-sqlalchemy
我正在尝试使用Flask-SQLAlchemy和两个MySQL数据库进行多对多连接,除非它使用错误的数据库连接表,否则它非常接近.这是基础......
我有main_db和vendor_db.的表是设置为main_db.users,main_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'
}
Run Code Online (Sandbox Code Playgroud)
模型定义设置如下:
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))
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试获取用户的产品时,它试图vendor_db用于连接表而不是main_db.有什么想法我可以main_db改用吗?我已经尝试设置另一个绑定main_db并设置info={'bind_key': 'main_db'}关系表定义,但没有运气.谢谢!
jef*_*fff 12
原来我需要做的是在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'
)
Run Code Online (Sandbox Code Playgroud)
希望这有助于其他人!
| 归档时间: |
|
| 查看次数: |
1759 次 |
| 最近记录: |