knex总是从query返回相同的结果



试图使搜索功能,将搜索数据库并返回任何结果'像'一个字符串。当我使用SQL调用数据库时,它工作正常,但是当我尝试使用knex调用时,我得到0结果,或者无论我将字符串更改为什么,结果都是相同的。

sql(工作)

SELECT * FROM stockList WHERE symbol LIKE '%AAPL%' AND sec_type = 'stock';

我正在使用请求。参数为调用一个函数的路由。可以更改的两件事是'sec_type'和'symbol'

路线
app.get('/api/getStockList/:nameType/:queryParams', requireLogin, async (req, res, next) => {
const {nameType, queryParams} = req.params;

//Call Search Function 
const searchData = await Search.searchSymbols(nameType, queryParams);
res.send(searchData)
})

knex函数

//Connect to Database
const knex = require('knex')({
client: 'mysql',
connection: {
host: 'localhost',
user: 'admin',
password: keys.MysqlPassword,
database: 'csv_stock_data',
},
});
//Create knex function
exports.searchSymbols = async (search = '', sec_type) => {
console.log(search + sec_type)
//If No type selected Default is All
if (sec_type === 'All') {
const results = await knex('stockList')
.select({
symbol: 'symbol',
displaySymbol: 'displaySymbol',
description: 'description',
sec_type: 'sec_type',
})
.where('symbol', 'like', `%${search.toUpperCase()}%`)
// .orWhere('description', 'like', `%${search}%`);
console.log(results)
return results.map((row) => {
return row;
});
} else {
//else return data by type
const results = await knex('stockList')
.select({
symbol: 'symbol',
displaySymbol: 'displaySymbol',
description: 'description',
sec_type: 'sec_type',
})
.where('sec_type', sec_type)
.where('symbol', 'like', `%${search.toUpperCase()}%`)
// .orWhere('description', 'like', `%${search.toUpperCase()}%`);
return results.map((row) => {
return row;
});
}
};

给定您想要的SQL语句,我可以这样做:

knex('stockList')
.select()
.where('symbol', 'like', `%${'foobar'.toUpperCase()}%`)
.where('sec_type', 'stock')

生成语句:

select * from "stockList" where "symbol" like '%FOOBAR%' and "sec_type" = 'stock'

您可以在这里实验这个查询:QueryLab

你需要把你的variable放回去,我把'foobar'字符串放回去测试。

最新更新