flask-sqlalchemy 文档如何阅读 ?

请问代码中的 metadatas["auth"] 是什么..

with app.app_context():
    db.reflect()

class User:
    __table__ = db.metadatas["auth"].tables["user"]
阅读 1.9k
1 个回答

简答

metadatas["auth"]会返回这个auth数据库下的MetaData类,其中存储了多个表对象和它们关联的数据库中的对象。

解释

https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/binds

通常会在项目一开始定义好数据库映射关系,用bind_key(如meta、auth)代表不同的数据库名,后面则为对应的数据库连接配置信息。

SQLALCHEMY_BINDS = {
    "meta": "sqlite:////path/to/meta.db",
    "auth": {
        "url": "mysql://localhost/users",
        "pool_recycle": 3600,
    },
}

之后定义每个表模型类时,则需指定__bind_key__ = "auth",表明表位于哪个数据库之中。

回到问题,上面的链接中有这样一段说明:

The default engine is SQLAlchemy.engine, and the default metadata is SQLAlchemy.metadata. SQLAlchemy.engines and SQLAlchemy.metadatas are dicts mapping all bind keys.

所以SQLAlchemy.metadatas是一个类似这样的结构:

{
    "meta": sqlalchemy.sql.schema.MetaData,
    "auth": sqlalchemy.sql.schema.MetaData,
}

对于MetaData类:A collection of Table objects and their associated schema constructs. 它也只是一个集合,存储了多个表对象和它们关联的数据库中的对象

而它有一个tables属性,会返回A dictionary of Table objects keyed to their name or “table key”,就是一个表对象key与它对应的表对象的映射

因此这一整行其实就是将auth对应的数据库内的user对应的数据表对象赋值给了__table__变量,省去了一个一个地再去定义表字段的过程。

__table__ = db.metadatas["auth"].tables["user"]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题