- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要实现的是通过使用数据库限定表名访问两个数据库中的表的能力(无需使用 SQL USE
语句专门设置默认数据库)。我在 Node.js v10.15.3 上运行的 JavaScript 应用程序使用 NPM mysql 2.17.1 库连接到 MySql,如下所示:
const mysql = require('mysql');
...
let configuration = {
host: "localhost",
port: 3306,
user: "user",
password: "password"
};
let connection = mysql.createConnection(configuration);
连接已建立,但当我使用数据库限定表名进行查询时
let select = 'SELECT COUNT(*) AS count FROM application.table;';
connection.query(select);
我得到:
(node:20332) UnhandledPromiseRejectionWarning: Error: ER_NO_DB_ERROR: No database selected
我的猜测是,这个错误是 mysql NPM 库检测到我没有指定要使用的数据库,因此我尝试在 SELECT 语句之前添加以下内容:
connection.query(`USE application;`);
...现在我得到:
(node:10412) UnhandledPromiseRejectionWarning: Error: ER_NO_SUCH_TABLE: Table 'application.application.table' doesn't exist
因此,Node mysql
库似乎在我引用任何数据库对象的任何地方都在前面添加了数据库名称...
我实际上将数据库限定表名称存储为 'application.table'
或 'metadata.table'
形式的 JavaScript 字符串,并且更愿意保留这些采用这种格式是为了简化管理(例如,如果设计需要将表从一个数据库移动到另一个数据库,我们只需更改在一个位置引用该表的字符串)。
是否有 Node mysql 库配置选项来确保所有数据库对象引用都是数据库限定的?
最佳答案
MySQL Node 包被设计为这样使用:
let configuration = {
host: "localhost",
port: 3306,
user: "user",
password: "password",
database: "application" // Add database name here
};
您可以使用changeUser函数更改数据库,如下所示:
connection.changeUser({
database : 'metadata'
}, (err) => {
if (err) {
console.log('Error in changing database', err);
return;
}
// Do another query
})
据我所知,无法使用 MySQL Node 包使用 database.table
表示法查询数据库。
编辑:我根据您的评论看到了一些内容..我认为可以做您想做的事!看看这个:
var options = {sql: '...', nestTables: '_'};
connection.query(options, function (error, results, fields) {
if (error) throw error;
/* results will be an array like this now:
[{
table1_fieldA: '...',
table1_fieldB: '...',
table2_fieldA: '...',
table2_fieldB: '...',
}, ...]
*/
});
似乎您可以传递分隔符nestTables
或类似在查询中使用表名称的内容!
By default, node-mysql will overwrite colliding column names in the order the columns are received from MySQL, causing some of the received values to be unavailable.
However, you can also specify that you want your columns to be nested below the table name like this
所以我想这里有一个解决方法!不知道更多了,抱歉:/
关于mysql - 始终使用数据库限定对象引用时出现错误 : ER_NO_DB_ERROR: No database selected (Node. js + MySql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57598136/
我是一名优秀的程序员,十分优秀!