mysql“未选择数据库”错误(1046),使用xdevapi和node

44u64gxh  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(383)

我只是尝试使用npm上的@mysql/xdevapi模块来执行一个非常基本的、近乎“helloworld”的操作,以简单地获取我创建的数据库中的行。

const mysqlx = require('@mysql/xdevapi');

const config = {
    password: 'agoodpassword!',
    user: 'user',
    host: 'localhost',
    port: 33060,
    schema: 'myDatabase'
};

mysqlx
    .getSession(config)
    .then(session => {
    return session
    .sql('SELECT * FROM `myTable`;')
    .execute();
})
.catch((err)=>{
    console.log(err)
})

我想不出比这更简单的方法来看看我是否能使连接器工作,因为我没有成功地将它作为我的项目的一部分。
当我的选项中的关键字“schema”旁边清楚地列出“no database selected”错误时,我仍然会得到它。。。架构和数据库是一样的,如果我回忆正确。。。
我真的不知道怎么了,任何帮助都会很感激的。
关于如何使用这个模块,我引用了这个https://dev.mysql.com/doc/dev/connector-nodejs/8.0/ )

vbopmzt1

vbopmzt11#

在应用任何“黑客”解决方案(如在每个表/列选择中写入模式名称)之前,请重新考虑下一步。查看官方文件,您的问题在这里描述。
我将发布开场白,您可以在文档中看到它们直接解决了您的问题:
新打开的会话没有架构集。建立会话时,没有隐式设置默认模式的概念。可以定义默认模式,但在显式选择之前,会话的当前模式不会设置为默认模式。

bzzcjhmw

bzzcjhmw2#

当前,即使您可以使用连接选项定义默认模式( myDatabase 在您的示例中),该模式不适用于会话级操作,例如使用 .sql() .
你有两个选择来克服这个限制。您可以在查询本身中定义架构:

return session.sql('SELECT * FROM `myDatabase`.`myTable`').execute()

或者,在会话上下文中显式切换到该特定架构:

return session.sql('USE `myDatabase`')
  .execute()
  .then(() => {
    return session.sql('SELECT * FROM `myTable`')
      .execute()
  })

免责声明:我是xdevapi node.js连接器负责人dev。

相关问题