如果我想使用两个数据库,是否需要创建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
. 我需要使用统计数据库中的现有表 .
实现这个目标的正确方法是什么?谢谢 .
3 回答
您需要为要创建的每个数据库连接创建不同的sequelize实例:
从sequelize创建的每个实例都有自己的数据库信息(db host,url,user,pass等等),并且这些值不应该被更改,因此没有"correct"方法来创建与一个实例的多个连接sequelize .
From their docs:
One instance per database
执行此操作的方法是将数据库放在
config.json
文件中并在其上循环以创建连接,这可能是这样的:config.json
Your app
您需要进行更多编码才能启动并运行,但这是一个大致的想法 .
你为什么不使用原始查询?有了这个,您可以连接到一个数据库并查询另一个 . 请参阅下面的示例代码
如果您尝试将同一RDS中的对象关联到多个数据库,则可以使用
schema
.http://docs.sequelizejs.com/class/lib/model.js~Model.html#static-method-schema
这会将db名称添加到表名称中,因此,大概会出现如下问题:
SELECT A.ColA, B.ColB FROM SchemaA.ATable A INNER JOIN SchemaB.BTable B ON B.BId = A.BId