我正在构建一个查询MySQL数据库,获取表,字段,字段数据类型和条目的程序,并将其作为单个对象返回,以供以后将MySQL数据视为表使用。
这是构建对象的外观:
{
`Table_Name`: {
Title: `Table_Name`,
Fields: {
`Field Name`: `Datatype`
},
RowData: []
}
}
获取表的查询很好,但是获取行数据的查询却没有。查询功能如下:
function getRows(){
let secondpromises = [];
secondpromises.push(
new Promise((resolve, reject) => {
for(x in Tables){
Connect_SQL(SQLcreds, w_newSconn, (conn) => {
conn.query(`SELECT * FROM ${Tables[x]}`, (err, results) => {
if(err){
console.log(err);
reject(err);
}else{
for(r in results){
Tables[`${Tables[x].Title}`].RowData.push(results[r]);
}
resolve(results);
}
});
});
if(x == Tables.length - 1){
Promise.all(secondpromises).then(() => {
if(w_newSconn){
w_newSconn.close();
w_newSconn = null;
}
console.log(Tables);
});
}
}
})
);
}
错误来自conn.query()。抛出错误,指出我的SQL语法中存在错误:
SELECT * FROM [object Object]
我了解原因,而且我敢肯定有一种方法可以通过JSON.Stringify()来解决,但是必须有一种更简单的方法。我已经尝试过创建一个像这样的变量:
let objArray = Object.keys(Tables)
但是它仍然返回了[object Object],我们将不胜感激。
答案 0 :(得分:0)
Tables[x]
是一个对象。您需要从中获取表名。
conn.query(`SELECT * FROM ${Tables[x].Title}`, (err, results) => {
看起来属性名称与标题相同,因此您可以执行以下操作:
conn.query(`SELECT * FROM ${x}`, (err, results) => {
答案 1 :(得分:0)
我最终在循环中创建了一个变量
let table = keys[x]
可以解决问题,无论出于什么原因,$ {keys [x]}返回的都是未定义的,但是变量返回了表名。从理论上讲,我可以将for循环更改为
for(x in Tables)
和x将返回标题,所以我可以回去以这种方式重写它。谢谢。