最近我学习使用node和node-sqlite3来操作sqlite3,这里有一个示例.
var sqlite3 = require('sqlite3');
var db = new sqlite3.Database(':memory:');
db.serialize(function() {
db.run("CREATE TABLE test(info TEXT)");
db.run("INSERT INTO test (info) VALUES ('info1')");
})
db.close();
Run Code Online (Sandbox Code Playgroud)
文档说db.serialized用来确保SQL行按顺序执行,但我很困惑,为什么不按顺序执行它们db.serialize,毕竟它们会从事件队列中拉出并按顺序执行?它在这里如何运作?
如果只有一个sql要执行,运行它是否安全,db.serialize如下所示?
var sqlite3 = require('sqlite3');
var db = new sqlite3.Database(':memory:');
db.run("CREATE TABLE test(info TEXT)");
db.close();
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用单个操作将许多不同的行插入到 sqlite 数据库中。每行都有多个列,我将数据表示为数组的数组。
我已阅读用户指南和其他教程,但所有提到插入多行的教程都适用于仅具有单列的行。
我正在尝试插入一个更大的数组,但为了测试它,我将其分解为两个条目。
let testArtist = [["string", 1, 2, "string"], ["string", 3, 4, "string"]];
let artistQuery = "INSERT INTO artists (artist, numSongs, numAlbums, picture) VALUES (?, ?, ?, ?), (?, ?, ?, ?)";
db.serialize(
db.run(artistQuery, [testArtist], function(err){
if(err) throw err;
});
});
Run Code Online (Sandbox Code Playgroud)
这是插入操作的结果
select * from artists;
1||||
2||||
Run Code Online (Sandbox Code Playgroud)
因此,AUTOINCREMENT正在插入整数 ID,但没有插入数据。
我试图安装 npm,但我不断收到此错误,我认为与 hummus 模块有关:
npm WARN deprecated ini@1.3.5: Please update to ini >=1.3.6 to avoid a prototype pollution issue
npm ERR! code 1
npm ERR! path /Users/abcd/Desktop/project/project_l_api/node_modules/hummus
npm ERR! command failed
npm ERR! command sh -c node-gyp rebuild
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using node-gyp@7.1.2
npm ERR! gyp info using node@15.8.0 | darwin | x64
npm ERR! gyp info find Python using Python version 3.9.1 found at "/usr/local/opt/python@3.9/bin/python3.9"
npm ERR! …Run Code Online (Sandbox Code Playgroud) 我正在努力让nexe使用一个使用sqlite3的节点程序.当我尝试时,我在运行时得到它:
package.json must declare these properties:
binary.module_name
binary.module_path
binary.host
Run Code Online (Sandbox Code Playgroud)
我已经在网上阅读了所有内容 - 我发现很多文章都说不支持node-pre-gyp,有些人说你必须创建一些神秘的.node文件,实际上很多都使用sqlite3作为一个例子 - 但没有任何东西能给我一些关于如何让它真正起作用的线索.
我尝试使用--build-from-source安装sqlite,这本身就是一个考验,但是没有做任何事情.谁能解释究竟如何获得nexe与sqlite3的工作.
我在 上使用better-sqlite3Node,但我怀疑我的问题也适用于node-sqlite3。
我基本上有两个与服务器渲染网站相关的简单问题:
我需要显式调用.close()数据库吗?我似乎记得在某处读过,当当前范围(如当前函数)退出时它会自动关闭。如果我从未.close()在 Web 服务器场景中调用并接受大量请求怎么办?
如果您有一堆不同的组件(身份验证、授权、本地化、支付等),并且每个组件可能需要也可能不需要在请求的整个生命周期中访问数据库(这些组件的生命周期非常短暂,除了付款),是不是更好
谢谢
我正在使用sqlite3NPM 包。我想将 JSON 存储在我的数据库列之一中。我知道 SQLite 本身能够存储 JSON https://www.sqlite.org/json1.html,但我不一定确定我将如何通过 Node.js 做到这一点。
之前有没有人遇到过这种情况,使用sqlite3NPM 包存储 JSON?使用轻量级 NoSQL 数据库会更好吗?
有没有一种方法可以node-sqlite3针对我要在我的应用中定位的多个平台进行安装,而不必为每个目标平台组合都运行独立的构建?
在我的Node.js应用程序中,我有一个npm依赖项node-sqlite3(GitHub,npm),其中包含针对不同平台的不同二进制文件(绑定)。
我的应用程序针对不同的平台,包括Windows,Linux和macOS(ia32和x64)以及现代的Node版本:v6,v7和v8。该应用没有任何特定于平台的行为。
如果我使用安装项目的依赖npm install,node-sqlite3下载二进制文件只是针对当前平台(比方说win32,x64,Node v7.10)。
我还有一个Travis CI构建配置,可用于持续部署和持续集成。我选择Ubuntu Trusty作为执行构建的主机。
作为构建过程的一部分,应用的依赖项由安装npm install。在部署过程中,具有相关性的已构建应用程序将被打包(存档)并上传到文件托管中,以进行进一步分发。
node-sqlite3 不是为我需要的所有目标平台安装的,而是仅为当前正在使用的平台(用于开发或执行构建)安装的。
我可以执行构建和部署:
但这似乎是一个巨大的开销。正如我已经说过的,该应用程序没有任何特定于平台的行为。我信任node-sqlite3供应商在我定位的所有主要平台上进行了测试。
在 中node-sqlite3,如果 db 当前处于序列化模式,下一条语句会在上一条语句的回调完成之前等待,还是会与下一条语句同时运行?
使用 编写事务的最佳方法是node-sqlite3什么?我已经考虑过这两种方法,但我不确定哪一种是正确的,或者即使它们都是错误的。
// NEXT DB STATEMENT WAITS FOR CALLBACK TO COMPLETE?
db.serialize(() => {
db.run('BEGIN');
// statement 1
db.run(
sql1,
params1,
(err) => {
if (err) {
console.error(err);
return db.serialize(db.run('ROLLBACK'));
}
}
);
// statement 2
db.run(
sql2,
params2,
(err) => {
if (err) {
console.error(err);
return db.serialize(db.run('ROLLBACK'));
}
return db.serialize(db.run('COMMIT));
}
);
});
// NEXT DB STATEMENT DOES NOT WAIT FOR CALLBACK TO COMPLETE?
db.serialize(() => {
db.run('BEGIN');
// statement 1 …Run Code Online (Sandbox Code Playgroud) 我创建了一个运行良好的电子项目,但是当我尝试使用电子打包器打包电子应用程序然后运行它时。我正面临一个例外
未捕获的异常:错误:找不到模块需要堆栈 'E:\app-folder..release-builds\app-win32-ia32\resources\app....\node_sqlite3.node'
'这是我的 package.json'
{
"name": "app",
"version": "1.0.0",
"main": "main.js",
"devDependencies": {
"electron": "^8.2.0",
"electron-builder": "^22.8.0",
"electron-rebuild": "^1.10.1"
},
"scripts": {
"start": "electron .",
"rebuild": "electron-rebuild -f -w sqlite3",
"package-win": "electron-packager . App--overwrite --platform=win32 --arch=ia32 --icon=assets/icons/win/icon.ico --prune=true --out=release-builds --version-string.CompanyName=CE --version-string.FileDescription=CE --version-string.ProductName=\"App\"",
"postinstall": "electron-builder install-app-deps"
},
"dependencies": {
"axios": "^0.19.2",
"concat-stream": "^2.0.0",
"datatables.net": "^1.10.20",
"datatables.net-dt": "^1.10.20",
"ejs": "^3.1.5",
"electron-packager": "^15.0.0",
"express-validator": "^6.6.1",
"form-data": "^3.0.0",
"jquery": "^3.5.0",
"nodemailer": "^6.4.11",
"sqlite3": "^5.0.0"
}
Run Code Online (Sandbox Code Playgroud)
}
javascript electron electron-builder node-sqlite3 electron-packager
我正在尝试使用以下方法构建一个小型桌面应用:
NodeJS将用于扫描本地用户hdd并插入在SQLite3数据库中找到的特定文件.
我检查了几十个文档和建议.他们中的大多数建议使用NodeJS express框架并在Angular 4+ - > Express - > SQLite3之间创建图层.
我想避免使用快速框架,因为它将是桌面应用程序,根本不需要它.
我尝试了什么,我做了什么:
我安装了:
"sqlite3": "^3.1.9",
"node-pre-gyp": "^0.6.36",
Run Code Online (Sandbox Code Playgroud)
作为我项目中的依赖项.
如果您想使用本机nodejs库,我应该阅读,您应该运行电子重建.所以我也安装了电子重建:
"electron-rebuild": "^1.6.0"
Run Code Online (Sandbox Code Playgroud)
作为devDependencies并使用以下命令运行它:
./node_modules/.bin/electron-rebuild
Run Code Online (Sandbox Code Playgroud)
重建sqlite3成功完成.
比我运行电子申请,我得到以下错误:
/~/node-pre-gyp/lib/node-pre-gyp.js
Module build failed: Error: ENOENT: no such file or directory, open '/home/haris/development/walter/angular-electron-starter/node_modules/node-pre-gyp/lib/node-pre-gyp.js'
at Error (native)
@ ./~/sqlite3/lib/sqlite3.js 1:13-36
@ ./src/app/home/home.component.ts
@ ./src/app/home/index.ts
@ ./src/app/app.module.ts
@ ./src/app/index.ts
@ ./src/main.browser.ts
@ multi (webpack)-dev-server/client?http://localhost:3000 ./src/main.browser.ts
Run Code Online (Sandbox Code Playgroud)
我卡在这里 我尝试了更多的东西,比如:
1. Removing node_modules
2. npm install --build-from-source
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的错误.
任何建议或帮助将非常感激.
node-sqlite3 ×10
node.js ×7
sqlite ×3
electron ×2
npm ×2
angular ×1
database ×1
hummus.js ×1
javascript ×1
json ×1
npm-install ×1
travis-ci ×1