Flask-SQLAlchemy多数据库绑定及元数据详解
本文深入探讨Flask-SQLAlchemy框架中db.metadatas["auth"]
代码片段的含义和用法。此代码通常用于连接多个数据库,并从已存在的数据库表映射模型类。
核心在于db.metadatas["auth"]
部分,它并非直接访问数据库表,而是访问Flask-SQLAlchemy管理的元数据对象。Flask-SQLAlchemy利用SQLALCHEMY_BINDS
配置管理多个数据库连接,每个连接用bind_key
标识(例如代码中的"auth"
和"meta"
)。 SQLALCHEMY_BINDS
配置示例如下:
SQLALCHEMY_BINDS = { "meta": "sqlite:////path/to/meta.db", "auth": { "url": "mysql://localhost/users", "pool_recycle": 3600, }, }
在这个例子中,"auth"
对应一个MySQL数据库,连接字符串为"mysql://localhost/users"
。db.metadatas
是一个字典,键为bind_key
,值为对应的元数据对象。元数据对象包含数据库表信息,存储多个表对象及其关联的数据库对象。
因此,db.metadatas["auth"]
获取的是"auth"
数据库对应的元数据对象。db.metadatas["auth"].tables["user"]
则进一步提取该元数据对象中名为"user"
的表对象。
最后,__table__ = db.metadatas["auth"].tables["user"]
将"auth"
数据库中名为"user"
的表对象赋值给user
类的__table__
属性。 这使得user
类直接映射到已存在的"user"
数据库表,无需显式定义表结构。 这是一种从现有数据库表创建模型类的便捷方法,避免了重复定义表结构。 前提是数据库连接已预先配置好,并且数据库表已存在。