亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用node操作SQLite的方法

 更新時(shí)間:2023年10月22日 08:46:10   作者:前端少年汪  
SQLite是一種輕量級(jí)的嵌入式關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它以庫的形式存在,可以嵌入到應(yīng)用程序中,使用Node.js操作SQLite數(shù)據(jù)庫有多種方式,其中常用的方式包括使用sqlite3模塊、sequelize模塊和knex模塊,本文將詳細(xì)的給大家介紹這幾種方式,需要的朋友可以參考下

什么是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)文章

  • angularJS 如何讀寫緩沖的方法(推薦)

    angularJS 如何讀寫緩沖的方法(推薦)

    angularJS 如何讀寫緩沖?下面小編就為大家?guī)硪黄猘ngularJS 讀寫緩沖的方法(推薦)。希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2016-08-08
  • node.js中的events.EventEmitter.listenerCount方法使用說明

    node.js中的events.EventEmitter.listenerCount方法使用說明

    這篇文章主要介紹了node.js中的events.EventEmitter.listenerCount方法使用說明,本文介紹了events.EventEmitter.listenerCount的方法說明、語法、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • nodejs微信公眾號(hào)支付開發(fā)

    nodejs微信公眾號(hào)支付開發(fā)

    這篇文章主要為大家詳細(xì)介紹了nodejs微信公眾號(hào)支付開發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • node里的filesystem模塊文件讀寫操作詳解

    node里的filesystem模塊文件讀寫操作詳解

    這篇文章主要為大家介紹了node里的filesystem模塊文件讀寫操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • node.js開機(jī)自啟動(dòng)腳本文件

    node.js開機(jī)自啟動(dòng)腳本文件

    這篇文章主要介紹了node.js開機(jī)自啟動(dòng)腳本文件的方法和代碼,這里分享給大家,有需要的小伙伴參考下吧
    2014-12-12
  • 輕松創(chuàng)建nodejs服務(wù)器(7):阻塞操作的實(shí)現(xiàn)

    輕松創(chuàng)建nodejs服務(wù)器(7):阻塞操作的實(shí)現(xiàn)

    這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(7):阻塞操作的實(shí)現(xiàn),本文先是組出了代碼,然后對(duì)代碼一一分析,需要的朋友可以參考下
    2014-12-12
  • node 使用multer中間件上傳報(bào)錯(cuò)Unexpected end of form的問題及解決方法

    node 使用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-03
  • Node.js進(jìn)行串口通信的實(shí)現(xiàn)示例

    Node.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-02
  • Node.js Addons翻譯(C/C++擴(kuò)展)

    Node.js Addons翻譯(C/C++擴(kuò)展)

    這篇文章主要介紹了Node.js Addons翻譯(C/C++擴(kuò)展) 的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • nodejs body-parser 解析post數(shù)據(jù)實(shí)例

    nodejs body-parser 解析post數(shù)據(jù)實(shí)例

    下面小編就為大家?guī)硪黄猲odejs body-parser 解析post數(shù)據(jù)實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07

最新評(píng)論