我正在尝试使用faker通过knex将数据插入到postgresql数据库中。
见下面一个最低限度的例子:
//Loading from an external file
var knex = require('knex')({
client: 'postgresql',
connection: {
database: 'knexdb',
user: 'root',
password: 'root'
},
debug: false,
})
// using faker
const faker = require('faker')
async function main() {
//test connection
await knex.raw('select 1+1 as result').then(function () {
console.log("valid db connection")
// there is a valid connection in the pool
});
//delete data
await knex('posts').del().then(function () {
const res = knex('posts')
if (res) {
console.log("Table content deleted")
} else {
console.log(res)
}
})
const dataAmount = 3
console.log("lets insert " + dataAmount + " rows of data")
for (var index = 0; index < dataAmount; index++) {
try {
await knex('posts').insert({
title: faker.random.word,
description: faker.lorem.paragraph,
deleted: faker.random.boolean,
createdAt: faker.date.recent,
updatedAt: faker.date.recent
})
} catch (e) {
console.log(e)
}
}
// select all
res = await knex('posts')
console.log('All: ', res)
}
main() //.then().catch(err => console.error(err))
我收到以下错误SELECT * with no tables specified is not valid
。请参阅下面的完整输出:
有效的数据库连接 表内容已删除 插入3行数据 {error:没有指定表的SELECT *无效 在Connection.parseE(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:546:11) 在Connection.parseMessage(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:371:19) 在Socket。 (C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:114:22) 在emitOne(events.js:115:13) 在Socket.emit(events.js:210:7) 在addChunk(_stream_readable.js:266:12) 在readableAddChunk(_stream_readable.js:253:11) 在Socket.Readable.push(_stream_readable.js:211:10) 在TCP.onread(net.js:585:20) 名称:&#39;错误&#39;, 长度:117, 严重程度:&#39; ERROR&#39;, 代码:&#39; 42601&#39;, 细节:未定义, 提示:未定义, 职位:&#39; 99&#39;, internalPosition:undefined, internalQuery:undefined, 其中:undefined, schema:undefined, 表:undefined, 专栏:未定义, dataType:undefined, 约束:未定义, file:&#39; parse_target.c&#39;, line:&#39; 1211&#39;, 例程:&#39; ExpandAllTables&#39; } {error:没有指定表的SELECT *无效 在Connection.parseE(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:546:11) 在Connection.parseMessage(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:371:19) 在Socket。 (C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:114:22) 在emitOne(events.js:115:13) 在Socket.emit(events.js:210:7) 在addChunk(_stream_readable.js:266:12) 在readableAddChunk(_stream_readable.js:253:11) 在Socket.Readable.push(_stream_readable.js:211:10) 在TCP.onread(net.js:585:20) 名称:&#39;错误&#39;, 长度:117, 严重程度:&#39; ERROR&#39;, 代码:&#39; 42601&#39;, 细节:未定义, 提示:未定义, 职位:&#39; 99&#39;, internalPosition:undefined, internalQuery:undefined, 其中:undefined, schema:undefined, 表:undefined, 专栏:未定义, dataType:undefined, 约束:未定义, file:&#39; parse_target.c&#39;, line:&#39; 1211&#39;, 例程:&#39; ExpandAllTables&#39; } {error:没有指定表的SELECT *无效 在Connection.parseE(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:546:11) 在Connection.parseMessage(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:371:19) 在Socket。 (C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:114:22) 在emitOne(events.js:115:13) 在Socket.emit(events.js:210:7) 在addChunk(_stream_readable.js:266:12) 在readableAddChunk(_stream_readable.js:253:11) 在Socket.Readable.push(_stream_readable.js:211:10) 在TCP.onread(net.js:585:20) 名称:&#39;错误&#39;, 长度:117, 严重程度:&#39; ERROR&#39;, 代码:&#39; 42601&#39;, 细节:未定义, 提示:未定义, 职位:&#39; 99&#39;, internalPosition:undefined, internalQuery:undefined, 其中:undefined, schema:undefined, 表:undefined, 专栏:未定义, dataType:undefined, 约束:未定义, file:&#39; parse_target.c&#39;, line:&#39; 1211&#39;, 例程:&#39; ExpandAllTables&#39; } 全部:[] ^ C C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ src&gt; node t3-faker.js 有效的数据库连接 表内容已删除 让我们插入3行数据 {error:没有指定表的SELECT *无效 在Connection.parseE(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:546:11) 在Connection.parseMessage(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:371:19) 在Socket。 (C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:114:22) 在emitOne(events.js:115:13) 在Socket.emit(events.js:210:7) 在addChunk(_stream_readable.js:266:12) 在readableAddChunk(_stream_readable.js:253:11) 在Socket.Readable.push(_stream_readable.js:211:10) 在TCP.onread(net.js:585:20) 名称:&#39;错误&#39;, 长度:117, 严重程度:&#39; ERROR&#39;, 代码:&#39; 42601&#39;, 细节:未定义, 提示:未定义, 职位:&#39; 99&#39;, internalPosition:undefined, internalQuery:undefined, 其中:undefined, schema:undefined, 表:undefined, 专栏:未定义, dataType:undefined, 约束:未定义, file:&#39; parse_target.c&#39;, line:&#39; 1211&#39;, 例程:&#39; ExpandAllTables&#39; } {error:没有指定表的SELECT *无效 在Connection.parseE(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:546:11) 在Connection.parseMessage(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:371:19) 在Socket。 (C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:114:22) 在emitOne(events.js:115:13) 在Socket.emit(events.js:210:7) 在addChunk(_stream_readable.js:266:12) 在readableAddChunk(_stream_readable.js:253:11) 在Socket.Readable.push(_stream_readable.js:211:10) 在TCP.onread(net.js:585:20) 名称:&#39;错误&#39;, 长度:117, 严重程度:&#39; ERROR&#39;, 代码:&#39; 42601&#39;, 细节:未定义, 提示:未定义, 职位:&#39; 99&#39;, internalPosition:undefined, internalQuery:undefined, 其中:undefined, schema:undefined, 表:undefined, 专栏:未定义, dataType:undefined, 约束:未定义, file:&#39; parse_target.c&#39;, line:&#39; 1211&#39;, 例程:&#39; ExpandAllTables&#39; } {error:没有指定表的SELECT *无效 在Connection.parseE(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:546:11) 在Connection.parseMessage(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:371:19) 在Socket。 (C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:114:22) 在emitOne(events.js:115:13) 在Socket.emit(events.js:210:7) 在addChunk(_stream_readable.js:266:12) 在readableAddChunk(_stream_readable.js:253:11) 在Socket.Readable.push(_stream_readable.js:211:10) 在TCP.onread(net.js:585:20) 名称:&#39;错误&#39;, 长度:117, 严重程度:&#39; ERROR&#39;, 代码:&#39; 42601&#39;, 细节:未定义, 提示:未定义, 职位:&#39; 99&#39;, internalPosition:undefined, internalQuery:undefined, 其中:undefined, schema:undefined, 表:undefined, 专栏:未定义, dataType:undefined, 约束:未定义, file:&#39; parse_target.c&#39;, line:&#39; 1211&#39;, 例程:&#39; ExpandAllTables&#39; } 全部:[]
有什么建议我做错了吗?
答案 0 :(得分:2)
你正在混合promises和async / await,这使得代码更难以阅读,你在那里也犯了一些错误,也许这就是你想做的事情:
//Loading from an external file
var knex = require('knex')({
client: 'postgresql',
connection: {
database: 'knexdb',
user: 'root',
password: 'root'
},
debug: false,
})
// using faker
const faker = require('faker')
async function main() {
//test connection
await knex.raw('select 1+1 as result');
console.log("valid db connection");
//delete data
await knex('posts').del();
const res = await knex('posts'); // FIXED: this was missing await
if (res.length === 0) { // FIXED: also empty array is truthy
console.log("Table content deleted");
} else {
console.log(res);
}
const dataAmount = 3
console.log(`lets insert ${dataAmount} rows of data`);
for (let index = 0; index < dataAmount; index++) {
try {
// FIXED: faker calls were missing () from the end
await knex('posts').insert({
title: faker.random.word(),
description: faker.lorem.paragraph(),
deleted: faker.random.boolean(),
createdAt: faker.date.recent(),
updatedAt: faker.date.recent()
});
} catch (e) {
console.log(e);
}
}
// select all
let finalRes = await knex('posts');
console.log('All: ', finelRes);
}
main().then().catch(err => console.error(err));
我认为没有表错误的SELECT *
是以某种方式引起的,因为你试图将函数写入数据库而不是值。
答案 1 :(得分:1)
您传递函数,而不是他们的返回值。
.kind == "audio"
以下代码段应为您提供所需的行为:
await knex('posts').insert({
title: faker.random.word,
description: faker.lorem.paragraph,
deleted: faker.random.boolean,
createdAt: faker.date.recent,
updatedAt: faker.date.recent
})