如果我想使用两个数据库,我需要创建多个Sequelize示例吗?也就是说,同一台计算机上的两个数据库。
如果不是,正确的做法是什么?在我看来,必须连接两次才能使用两个数据库似乎有点过头了。
例如,我有不同的数据库用于不同的功能,例如,假设我在一个数据库中有客户数据,在另一个数据库中有统计数据。
因此,在MySQL中:
MySQL [customers]> show databases;
+--------------------+
| Database |
+--------------------+
| customers |
| stats |
+--------------------+
我把这个和Sequelize联系起来
// Create a connection....
var Sequelize = require('sequelize');
var sequelize = new Sequelize('customers', 'my_user', 'some_password', {
host: 'localhost',
dialect: 'mysql',
pool: {
max: 5,
min: 0,
idle: 10000
},
logging: function(output) {
if (opts.log_queries) {
log.it("sequelize_log",{log: output});
}
}
});
// Authenticate it.
sequelize.authenticate().nodeify(function(err) {
// Do stuff....
});
我试图在一个模型的定义中使用点符号来“欺骗”它
var InterestingStatistics = sequelize.define('stats.interesting_statistics', { /* ... */ });
但这就创建了表customers.stats.interesting_statistics
。我需要使用STATS数据库中的现有表。
实现这一目标的正确方法是什么?谢谢。
4条答案
按热度按时间quhf5bfb1#
您需要为要创建的每个数据库连接创建不同的Sequelize示例:
从Sequelize创建的每个示例都有自己的DB INFO*(db host、url、user、pass等)*,这些值是不能更改的,所以没有使用Sequelize的一个示例创建多个连接的“正确”方法。
From their docs:
注意,在上面的例子中,Sequelize指的是库本身,而Sequelize指的是Sequelize的示例,表示连接到一个数据库。这是推荐的约定,在整个文档中都将遵循它。
要做到这一点,一种“常见的”方法是将数据库放在
config.json
文件中,然后循环遍历该文件以动态地创建连接,如下所示:config.json
您的APP
您将需要做一些更多的编码来启动和运行它,但这只是一个一般的想法。
cqoc49vn2#
为什么不使用RAW查询呢?这样,您就可以连接到一个数据库并查询另一个数据库。请参阅下面的示例代码。
bksxznpy3#
如果您尝试跨多个数据库关联同一RDS中的对象,则可以使用
schema
。Http://docs.sequelizejs.com/class/lib/model.js~Model.html#static-method-schema
这将使数据库名称成为表名的前缀,因此,假设您的查询结果如下:
SELECT A.ColA, B.ColB FROM SchemaA.ATable A INNER JOIN SchemaB.BTable B ON B.BId = A.BId
0h4hbjxa4#
除了选择的答案,因为我希望能够在多个数据库上运行迁移,这是我如何做到这一点,尽管它的设置相当费力,而且可能有一个更简单的方法(我希望),一旦设置它很容易添加迁移:
安装Sequelize-cli
npm i sequelize-cli
1.创建一个迁移目录,为每个数据库命名一个子目录(例如
/server/migrations/accounting
、/server/migrations/users
)1.为根目录下的每个数据库创建一个
.sequelize-mydb
文件(如.sequelize-accounting
.sequelize-users
等),并在每个文件中添加路径和数据库的相关信息:1.在Sequelize config.json中,将每个数据库配置的副本添加到顶层部分,即。在开发/生产部门之外,例如:
1.创建或添加到
package.json
的脚本部分:1.现在,每当您创建迁移时,请将自动生成的迁移文件复制到上面创建的相对迁移目录中,例如为记帐数据库中的表创建迁移,然后将该文件复制到Migrations/count目录。
1.最后,要运行迁移:
最棘手的部分是获得正确的相对路径(特别是在为Docker构建的情况下)。一旦准备就绪,每次创建新迁移时唯一额外的工作就是将该文件复制到适当的目录。