gpt4 book ai didi

mysql - 始终使用数据库限定对象引用时出现错误 : ER_NO_DB_ERROR: No database selected (Node. js + MySql)

转载 作者:行者123 更新时间:2023-11-29 15:41:25 25 4
gpt4 key购买 nike

我想要实现的是通过使用数据库限定表名访问两个数据库中的表的能力(无需使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com