文章内容

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


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - SQLAlchemy 多对多如何设置__bind_key__

分享到:

发表评论

评论列表