2

我在 watson 助手中有一个对话,我希望能够从 IBM 云功能调用一个操作来对我的数据库(Azure)进行一些查询。我不熟悉云功能,所以这可能是一个愚蠢的问题,我不明白如何与数据库建立连接,我尝试编写一些 nodejs 代码但我当然错了,因为它返回“内部错误” ”。我还尝试用 python 而不是 nodejs 编写一些代码。这又是一个愚蠢的问题,所以请原谅我。谢谢!

    var mysql = require('mysql');

    var connection = mysql.createConnection({
      host: 'my_host',
      user: 'my_user',
      password: 'my_psw',
      database: 'my_db'
    });

    connection.connect();

    rows = connection.query('my_query')
    if (!err) {
      console.log(typeof(rows));
      console.log('The solution is: ', rows);
    } else {
      console.log(typeof(rows));
      console.log('Error while performing Query.');

    }


    connection.end();

{
  "error": "Internal error."
}

import pyodbc as pyodbc

conn = pyodbc.connect('DRIVER={SQL Server};SERVER=my_server;DATABASE=my_db;UID=my_user;PWD=my_pwd')
cursor = conn.cursor()
sql = "my_sql" 
cursor.execute(sql)
result = cursor.fetchall()
print(result)


csr = conn.cursor()
csr.close()
del csr
conn.close()
    

{
  "error": "The action did not return a dictionary."
}

4

1 回答 1

1

错误来自您返回结果的方式。您需要将结果打包成有效的 JSON 结构。

return {"sqlresult": myresult}

我在上面的评论中引用了两个教程。聊天机器人教程使用Node.js 实现 Cloud Functions。这些函数是从 Watson Assistant 调用的。看看这个从 Db2 数据库中获取记录的操作。它打开一个数据库连接,获取记录并将它们打包到 JSON 结构中。然后将该 JSON 对象返回给 Watson Assistant。

本教程还展示了如何将数据库凭据传递到 Cloud Function 中。

于 2018-10-16T11:42:32.317 回答