路由器

使用多个数据库的最简单方法是设置数据库路由方案。默认路由方案确保对象“粘滞”到其原始数据库(即,从 foo 数据库检索的对象将保存在同一数据库上)。默认路由方案确保如果未指定数据库,所有查询都将回退到默认数据库。

用法

定义路由器

定义路由器很简单,您只需要编写一个具有 db_for_readdb_for_write 方法的类。

class Router:
    def db_for_read(self, model: Type[Model]):
        return "slave"

    def db_for_write(self, model: Type[Model]):
        return "master"

这两个方法返回配置中定义的连接字符串。

配置路由器

只需将其放入 tortoise 的配置中或 Tortoise.init 方法中。

config = {
    "connections": {"master": "sqlite:///tmp/test.db", "slave": "sqlite:///tmp/test.db"},
    "apps": {
        "models": {
            "models": ["__main__"],
            "default_connection": "master",
        }
    },
    "routers": ["path.Router"],
    "use_tz": False,
    "timezone": "UTC",
}
await Tortoise.init(config=config)
# or
routers = config.pop('routers')
await Tortoise.init(config=config, routers=routers)

之后,所有 select 操作都将使用 slave 连接,所有 create/update/delete 操作都将使用 master 连接。