文章内容
2022/1/11 15:18:51,作 者: 黄兵
SQLAlchemy 多对多如何设置__bind_key__
使用 SQLAlchemy 项目大一点都应该知道 __bind_key__
是干嘛的,在此简要说明一下:
从 0.12 开始 Flask-SQLAlchemy 可以轻松连接到多个数据库。为了实现这一点,它预先配置了 SQLAlchemy 以支持多个“绑定”。
什么是绑定?在 SQLAlchemy 中,绑定是可以执行 SQL 语句的东西,通常是连接或引擎。在 Flask-SQLAlchemy 中,绑定始终是在幕后为您自动创建的引擎。然后,这些引擎中的每一个都与一个短键(绑定键)相关联。然后在模型声明时使用此密钥将模型与特定引擎相关联。
如果没有为模型指定绑定键,则使用默认连接(由 配置SQLALCHEMY_DATABASE_URI)。
说人话:
如果有多个数据源(多个不同的数据库,或者有多个系统,分布在不同的数据库上),在模型中就需要设置 __bind_key__。
关于如何设置 __bind_key__,可以见下面参考资料,在此不多说。
下面有一个多对多的模型,具体代码如下:
# 文章与标签之间多对多关系
blog_tag_associations = db.Table('ip_crawler_blog_tag_associations',
db.Column('blog_id', db.Integer, db.ForeignKey('ip_crawler_blog.id')),
db.Column('tag_id', db.Integer, db.ForeignKey('ip_crawler_blog_tags.id'))
)
如果是其他模型,可以这样设置 __bind_key__:
# 文章相关表
class IPCrawlerBlog(db.Model):
__bind_key__ = 'ip_crawler_db'
__tablename__ = 'ip_crawler_blog'
id = db.Column(db.Integer, primary_key=True)
上市上面的多对多模型无法这样设置 __bind_key__,应该怎么设置呢?
# 文章与标签之间多对多关系
blog_tag_associations = db.Table('ip_crawler_blog_tag_associations',
db.Column('blog_id', db.Integer, db.ForeignKey('ip_crawler_blog.id')),
db.Column('tag_id', db.Integer, db.ForeignKey('ip_crawler_blog_tags.id')),
info={'bind_key': 'ip_crawler_db'})
这样就完成了多对多表的 __bind_key__ 设置。
参考资料:
1、Multiple Databases with Binds
黄兵个人博客原创。
评论列表