Sequelize 中每个 api 调用期间的动态数据库连接没有“n”个数据库

Nag*_*n R 6 mysql database postgresql node.js sequelize.js

实际上,我是在尝试了所有可能性和之前的问题答案后提出这个问题的。但是,我没有找到任何线索,这就是我问的原因

陈述 :

我在这里基于多租户架构工作。因此每个客户组织都需要拥有自己的数据库并且它们是相关的。因此,就我而言,我需要使用“'n'没有数据库”。为了解决我的情况,我需要根据每个用户对其各自数据库的请求动态建立数据库连接,并需要执行 CRUD 操作(注意:并发操作需要在自己的数据库上执行而不打扰其他数据库)。

我的偏好:

所以,最初我做了一些研究并计划使用Node + PostgreSQL + Sequelize

问题 :

然后我开始研究如何在每个 api 请求期间在续集中动态建立连接,但我什么也没找到。因为在所有教程和 stackoverflow 问题和答案中,数据库连接都不是完全动态的,续集连接是在应用程序初始化期间建立的,并且模型与续集数据库连接绑定(如果我的理解错误,请纠正我)。

解决方案 :

我搜索了续集的其他替代方案。然后,我在 postgresql 本机 pg 驱动程序的动态数据库连接中发现它就像

        const pool = new Pool({
        user: 'postgres',
        host: '127.0.0.1',
        database: 'todos-dev',
        password: 'aaaaa',
        port: 5432,
    })
    let query = 'SELECT * FROM "Todos"';
    pool.query(query, (error, results) => {
        if (error) {
            throw error
        }
        pool.end();
        res.status(200).json(results.rows)
    })
Run Code Online (Sandbox Code Playgroud)

然后我发现查询是原始 SQL 而不是 ORM。

问题 :

  1. 它能够在每个 api 请求期间执行后续动态数据库连接,而不是应用程序初始化?
  2. 如果问题 1 不可能,使用 pg 驱动程序好吗?如果查询是原始 sql,我可以使用 Mysql 而不是 PostgreSQL 吗?
  3. 如果问题1是可能的,那么迁移和播种怎么样(注意:根据我的假设,迁移和播种也需要动态连接到数据库,如果新迁移到达,则需要在for循环中一一建立到所有数据库的连接,然后进行迁移和播种需要单独运行)?

小智 1

我也有同样的问题。多个数据库在同一个MYSQL中,每个数据库都有相同的模型定义。我检查了sequelize源代码,发现一个sequelize实例可以解决多个数据库连接的问题。

连接配置:

{
  "username": "root",
  "password": "123456",
  "database": "",
  "port":  3306,
  "dialect": "MySQL"
}
Run Code Online (Sandbox Code Playgroud)

型号获取方式:

 static getModel(modelType, dbname) {
    let model = sequelize.models[module.name];
    model.tableName = {
        schema: dbname,
        tableName: modelType
    };
    sequelize.dialect.supports.schemas = true;
    return model;
}
Run Code Online (Sandbox Code Playgroud)

这允许您跨多个数据库动态查询。