使用node操作SQLite的方法
什么是sqlit
SQLite是一種輕量級(jí)的嵌入式關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它以庫的形式存在,可以嵌入到應(yīng)用程序中。它使用簡(jiǎn)單的、基于文件的數(shù)據(jù)庫格式,不需要獨(dú)立的服務(wù)器進(jìn)程,非常適合在資源有限的環(huán)境中使用。
SQLite的優(yōu)點(diǎn)
- 簡(jiǎn)單易用:SQLite的API簡(jiǎn)單明了,學(xué)習(xí)曲線低,使用方便。
- 零配置:無需復(fù)雜的配置和管理,只需一個(gè)數(shù)據(jù)庫文件即可開始使用。
- 占用資源少:SQLite數(shù)據(jù)庫文件通常很小,內(nèi)存占用也較少,適用于嵌入式設(shè)備或低性能環(huán)境。
- 支持事務(wù):具備ACID特性,支持事務(wù)操作,保證數(shù)據(jù)的完整性和并發(fā)控制。
- 跨平臺(tái):SQLite可以在多個(gè)操作系統(tǒng)上運(yùn)行,包括Windows、macOS、Linux等。
SQLite的缺點(diǎn)包括
- 并發(fā)性限制:由于它是單用戶模式,不支持多個(gè)寫操作同時(shí)進(jìn)行,因此在高并發(fā)讀寫場(chǎng)景下性能可能受限。
- 存儲(chǔ)容量有限:由于文件格式的限制,SQLite數(shù)據(jù)庫文件的大小通常有上限。
- 功能相對(duì)較少:相比于傳統(tǒng)的大型數(shù)據(jù)庫管理系統(tǒng),SQLite提供的功能較為有限,不適合處理大規(guī)模復(fù)雜數(shù)據(jù)。
SQLite適用于以下應(yīng)用場(chǎng)景
- 移動(dòng)應(yīng)用:由于SQLite的輕量級(jí)特性,它常被用于移動(dòng)應(yīng)用開發(fā)中,用來存儲(chǔ)和管理少量結(jié)構(gòu)化數(shù)據(jù)。
- 嵌入式系統(tǒng):SQLite的小巧和低資源占用使它成為嵌入式設(shè)備上的理想選擇,如物聯(lián)網(wǎng)設(shè)備、嵌入式系統(tǒng)等。
- 測(cè)試和原型開發(fā):在快速開發(fā)和測(cè)試階段,SQLite可以作為臨時(shí)的數(shù)據(jù)庫解決方案,提供方便的開發(fā)和測(cè)試環(huán)境。
- 小型網(wǎng)站:對(duì)于小型網(wǎng)站或個(gè)人項(xiàng)目,SQLite提供了一個(gè)簡(jiǎn)單可靠的數(shù)據(jù)庫解決方案,不需要復(fù)雜的數(shù)據(jù)庫服務(wù)器。
總之,SQLite在輕量級(jí)應(yīng)用和資源受限環(huán)境下具有優(yōu)勢(shì),適合那些對(duì)性能要求不高、數(shù)據(jù)量較小或者需要方便集成的場(chǎng)景。
如何操作sqlite
使用Node.js操作SQLite數(shù)據(jù)庫有多種方式,其中常用的方式包括使用sqlite3模塊、sequelize模塊和knex模塊。每種方式都有其特點(diǎn)和適用場(chǎng)景。
1. sqlite3:
- 純粹的SQLite數(shù)據(jù)庫驅(qū)動(dòng)模塊,提供了底層的數(shù)據(jù)庫訪問接口。
- 可以直接使用SQL語句進(jìn)行數(shù)據(jù)庫操作。
- 適合對(duì)數(shù)據(jù)庫操作有更細(xì)粒度控制需求的開發(fā)者。
2. sequelize:
- 是一個(gè)功能強(qiáng)大的ORM(Object-Relational Mapping)庫,支持多種數(shù)據(jù)庫包括SQLite。
- 提供了面向?qū)ο蟮姆绞蕉x模型,便于操作數(shù)據(jù)庫。
- 自動(dòng)構(gòu)建SQL查詢語句,簡(jiǎn)化數(shù)據(jù)庫操作。
- 支持事務(wù)管理、關(guān)聯(lián)查詢等高級(jí)功能。
- 適合需要使用ORM進(jìn)行數(shù)據(jù)庫操作或有復(fù)雜業(yè)務(wù)需求的開發(fā)者。
3. knex:
- 是一個(gè)SQL查詢構(gòu)建器,支持多種數(shù)據(jù)庫包括SQLite。
- 使用鏈?zhǔn)秸{(diào)用方法構(gòu)建SQL查詢語句。
- 支持靈活的查詢條件、聚合查詢、分頁等功能。
- 可以直接執(zhí)行SQL語句。
- 適合對(duì)數(shù)據(jù)庫操作有更高靈活性要求的開發(fā)者。
哪種方式最好用取決于實(shí)際需求。如果需要更底層的數(shù)據(jù)庫訪問接口或?qū)?shù)據(jù)庫操作有更細(xì)粒度的控制,可以選擇sqlite3模塊。如果需要使用ORM進(jìn)行數(shù)據(jù)庫操作或有復(fù)雜業(yè)務(wù)需求,可以選擇sequelize模塊。如果需要更靈活地構(gòu)建SQL查詢語句或有特定的查詢需求,可以選擇knex模塊。
一般是根據(jù)項(xiàng)目需求選擇適合的方式使用Node.js操作SQLite數(shù)據(jù)庫。
knex詳細(xì)介紹
官網(wǎng)介紹:
KneX可以在Node.js和瀏覽器中用作SQL查詢構(gòu)建器,但受WebSQL的限制(如不能刪除表或讀取模式)。 強(qiáng)烈反對(duì)在瀏覽器中編寫在服務(wù)器上執(zhí)行的SQL查詢,因?yàn)檫@可能會(huì)導(dǎo)致嚴(yán)重的安全漏洞。 在WebSQL之外構(gòu)建的瀏覽器主要用于學(xué)習(xí)目的-例如,您可以打開控制臺(tái)并使用kneX對(duì)象在此頁面上構(gòu)建查詢。
KneX的主要目標(biāo)環(huán)境是Node.js,您將需要安裝KneX庫,然后安裝相應(yīng)的數(shù)據(jù)庫庫:PG for PostgreSQL、CockroachDB和Amazon RedShift、PG-Native for PostgreSQL和Native C++libpq綁定(需要安裝PostgresSQL才能鏈接到它)、MySQL for MySQL或MariaDB、SQLite3 for SQLite3或Destous for MSSQL。
使用knex對(duì)sqlite的增刪改查
使用knex之前先得安裝knex和數(shù)據(jù)庫驅(qū)動(dòng),我這里用的是sqlite數(shù)據(jù)庫,所以需要安裝sqlite3
$ npm install knex --save # Then add one of the following (adding a --save) flag: $ npm install pg $ npm install pg-native $ npm install sqlite3 $ npm install better-sqlite3 $ npm install mysql $ npm install mysql2 $ npm install oracledb $ npm install tedious
根據(jù)自己的需要選擇合適的數(shù)據(jù)庫驅(qū)動(dòng)即可
初始化knex實(shí)例
const knex = require('knex')({ client: 'sqlite3', connection: { filename: './database.sqlite' } });
在實(shí)例化knex時(shí),可以傳入一些配置參數(shù)來進(jìn)行數(shù)據(jù)庫連接和其他相關(guān)配置。常用的配置參數(shù)如下:
client:指定數(shù)據(jù)庫類型,比如sqlite3、mysql、postgresql等。
connection:指定數(shù)據(jù)庫連接信息,可以是一個(gè)URL字符串或一個(gè)包含連接信息的對(duì)象,如host、port、user、password、database等。
pool:連接池的配置,控制數(shù)據(jù)庫連接的復(fù)用和管理,常用的配置項(xiàng)有min、max、idleTimeoutMillis等。
migrations:遷移文件相關(guān)的配置,用于數(shù)據(jù)庫遷移管理,包括directory(遷移文件目錄)、tableName(存儲(chǔ)遷移記錄的表名)等。
seeds:種子數(shù)據(jù)相關(guān)的配置,用于初始化數(shù)據(jù)庫,包括directory(種子數(shù)據(jù)文件目錄)等。
debug:是否開啟調(diào)試模式,輸出SQL查詢語句和參數(shù)。
以下是一個(gè)示例代碼,演示了實(shí)例化knex時(shí)的配置參數(shù):
const knex = require('knex')({ client: 'sqlite3', connection: { filename: './data/db.sqlite3' }, pool: { min: 2, max: 10 }, migrations: { directory: './migrations', tableName: 'knex_migrations' }, seeds: { directory: './seeds' }, debug: true }); module.exports = knex;
上述示例代碼中,使用SQLite3作為數(shù)據(jù)庫類型,指定了數(shù)據(jù)庫文件路徑。同時(shí)配置了連接池的最小連接數(shù)和最大連接數(shù)。定義了遷移文件和種子數(shù)據(jù)文件的目錄,以及遷移記錄表的表名。開啟了調(diào)試模式,輸出SQL查詢語句和參數(shù)。
根據(jù)實(shí)際需求,可以根據(jù)以上配置參數(shù)進(jìn)行靈活的配置。具體的配置項(xiàng)及其含義可以參考knex的官方文檔。
創(chuàng)建數(shù)據(jù)庫表
在使用knex創(chuàng)建表之前,可以通過knex.schema.hasTable()
方法檢查表是否已經(jīng)存在。以下是一個(gè)使用knex創(chuàng)建表前判斷表是否存在的示例代碼:
knex.schema.hasTable('users').then((exists) => { if (!exists) { return knex.schema.createTable('users', (table) => { table.increments('id').primary(); table.string('name'); table.string('email'); }); } }).then(() => { console.log('Table created successfully'); }).catch((err) => { console.error(err); });
在上述代碼中,首先使用knex.schema.hasTable()
方法檢查名為"users"的表是否存在。如果不存在,則執(zhí)行創(chuàng)建表的操作;如果存在,則直接跳過創(chuàng)建表的步驟。這樣可以確保在創(chuàng)建表之前先判斷表是否已存在。
通過這種方式,可以避免重復(fù)創(chuàng)建表或?qū)е洛e(cuò)誤。需要注意的是,在實(shí)際開發(fā)中,根據(jù)業(yè)務(wù)需求可能需要對(duì)表結(jié)構(gòu)進(jìn)行更精確的判斷,比如檢查是否存在特定的列等,可以根據(jù)具體情況進(jìn)行擴(kuò)展。
增刪改查
當(dāng)使用knex操作SQLite數(shù)據(jù)庫時(shí),可以按照以下方式進(jìn)行增刪改查操作:
- 插入數(shù)據(jù):
knex('users').insert({ name: 'John Doe', email: 'john.doe@example.com' }).then(() => { console.log('Data inserted successfully'); }).catch((err) => { console.error(err); });
- 查詢數(shù)據(jù):
knex.select().from('users').then((rows) => { rows.forEach((row) => { console.log(row.name, row.email); }); }).catch((err) => { console.error(err); });
- 更新數(shù)據(jù):
knex('users') .where('id', 1) .update({ name: '前端少年汪' }) .then(() => { console.log('Data updated successfully'); }).catch((err) => { console.error(err); });
- 刪除數(shù)據(jù):
knex('users') .where('id', 1) .del() .then(() => { console.log('Data deleted successfully'); }).catch((err) => { console.error(err); });
以上代碼演示了使用knex操作SQLite數(shù)據(jù)庫的基本增刪改查操作。根據(jù)實(shí)際需求,可以使用knex提供的更多方法和功能來完成更復(fù)雜的數(shù)據(jù)庫操作。
以上就是使用node操作SQLite的方法的詳細(xì)內(nèi)容,更多關(guān)于node操作SQLite的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
node.js中的events.EventEmitter.listenerCount方法使用說明
這篇文章主要介紹了node.js中的events.EventEmitter.listenerCount方法使用說明,本文介紹了events.EventEmitter.listenerCount的方法說明、語法、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12輕松創(chuàng)建nodejs服務(wù)器(7):阻塞操作的實(shí)現(xiàn)
這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(7):阻塞操作的實(shí)現(xiàn),本文先是組出了代碼,然后對(duì)代碼一一分析,需要的朋友可以參考下2014-12-12node 使用multer中間件上傳報(bào)錯(cuò)Unexpected end of fo
再前幾天還是可以正常上傳,但今天運(yùn)行出現(xiàn)該報(bào)錯(cuò),下面通過場(chǎng)景分析給大家介紹node使用multer中間件上傳,報(bào)錯(cuò)Unexpected end of form的解決方案,感興趣的朋友一起看看吧2025-03-03Node.js進(jìn)行串口通信的實(shí)現(xiàn)示例
本文主要介紹了Node.js進(jìn)行串口通信的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02Node.js Addons翻譯(C/C++擴(kuò)展)
這篇文章主要介紹了Node.js Addons翻譯(C/C++擴(kuò)展) 的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06nodejs body-parser 解析post數(shù)據(jù)實(shí)例
下面小編就為大家?guī)硪黄猲odejs body-parser 解析post數(shù)據(jù)實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07