如果要使用两个数据库,是否需要创建多个Sequelize实例?即,同一台计算机上的两个数据库。
如果没有,执行此操作的正确方法是什么?对我来说,必须两次连接才能使用两个数据库似乎有点过头了。
例如,对于不同的功能,我有不同的数据库,例如,假设一个数据库中有客户数据,而另一个数据库中有统计数据。
因此在MySQL中:
MySQL [customers]> show databases; +--------------------+ | Database | +--------------------+ | customers | | stats | +--------------------+
我有这个与续集联系
// 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。我需要使用统计数据库中的现有表。
customers.stats.interesting_statistics
实现此目的的正确方法是什么?谢谢。
您需要为要创建的每个数据库连接创建不同的sequelize实例:
const Sequelize = require('Sequelize'); const userDb = new Sequelize(/* ... */); const contentDb = new Sequelize(/* ... */);
从sequelize创建的每个实例都有其自己的数据库信息 (数据库主机,URL,用户,密码等) ,并且这些值无意更改,因此没有“正确”的方法来创建多个连接续集的实例。
从他们的文档 :
Sequelize将在初始化时设置一个连接池,因此理想情况下,每个数据库只能创建一个实例。
每个数据库一个实例
一种“通用”的方法是将数据库存储在config.json文件中,并在其上循环以动态创建连接,如下所示:
config.json
{ /*...*/ databases: { user: { path: 'xxxxxxxx' }, content: { path: 'xxxxxxxx' } } }
您的应用程式
const Sequelize = require('sequelize'); const config = require('./config.json'); // Loop through const db = {}; const databases = Object.keys(config.databases); for(let i = 0; i < databases.length; ++i) { let database = databases[i]; let dbPath = config.databases[database]; db[database] = new Sequelize( dbPath ); } // Or a one liner const db = Object.entries(config).reduce((r, db) => (r[db[0]] = db[1].path) && r, {}); // Sequelize instances: // db.user // db.content
您将需要多做一些编码才能使其启动并运行,但这是一个总体思路。