欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用node操作SQLite的方法

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

什么是sqlit

SQLite是一種輕量級(jí)的嵌入式關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它以庫(kù)的形式存在,可以嵌入到應(yīng)用程序中。它使用簡(jiǎn)單的、基于文件的數(shù)據(jù)庫(kù)格式,不需要獨(dú)立的服務(wù)器進(jìn)程,非常適合在資源有限的環(huán)境中使用。

SQLite的優(yōu)點(diǎn)

  • 簡(jiǎn)單易用:SQLite的API簡(jiǎn)單明了,學(xué)習(xí)曲線低,使用方便。
  • 零配置:無(wú)需復(fù)雜的配置和管理,只需一個(gè)數(shù)據(jù)庫(kù)文件即可開(kāi)始使用。
  • 占用資源少:SQLite數(shù)據(jù)庫(kù)文件通常很小,內(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ā)性限制:由于它是單用戶(hù)模式,不支持多個(gè)寫(xiě)操作同時(shí)進(jìn)行,因此在高并發(fā)讀寫(xiě)場(chǎng)景下性能可能受限。
  • 存儲(chǔ)容量有限:由于文件格式的限制,SQLite數(shù)據(jù)庫(kù)文件的大小通常有上限。
  • 功能相對(duì)較少:相比于傳統(tǒng)的大型數(shù)據(jù)庫(kù)管理系統(tǒng),SQLite提供的功能較為有限,不適合處理大規(guī)模復(fù)雜數(shù)據(jù)。

SQLite適用于以下應(yīng)用場(chǎng)景

  • 移動(dòng)應(yīng)用:由于SQLite的輕量級(jí)特性,它常被用于移動(dòng)應(yīng)用開(kāi)發(fā)中,用來(lái)存儲(chǔ)和管理少量結(jié)構(gòu)化數(shù)據(jù)。
  • 嵌入式系統(tǒng):SQLite的小巧和低資源占用使它成為嵌入式設(shè)備上的理想選擇,如物聯(lián)網(wǎng)設(shè)備、嵌入式系統(tǒng)等。
  • 測(cè)試和原型開(kāi)發(fā):在快速開(kāi)發(fā)和測(cè)試階段,SQLite可以作為臨時(shí)的數(shù)據(jù)庫(kù)解決方案,提供方便的開(kāi)發(fā)和測(cè)試環(huán)境。
  • 小型網(wǎng)站:對(duì)于小型網(wǎng)站或個(gè)人項(xiàng)目,SQLite提供了一個(gè)簡(jiǎn)單可靠的數(shù)據(jù)庫(kù)解決方案,不需要復(fù)雜的數(shù)據(jù)庫(kù)服務(wù)器。

總之,SQLite在輕量級(jí)應(yīng)用和資源受限環(huán)境下具有優(yōu)勢(shì),適合那些對(duì)性能要求不高、數(shù)據(jù)量較小或者需要方便集成的場(chǎng)景。

如何操作sqlite

使用Node.js操作SQLite數(shù)據(jù)庫(kù)有多種方式,其中常用的方式包括使用sqlite3模塊、sequelize模塊和knex模塊。每種方式都有其特點(diǎn)和適用場(chǎng)景。

1. sqlite3:

  • 純粹的SQLite數(shù)據(jù)庫(kù)驅(qū)動(dòng)模塊,提供了底層的數(shù)據(jù)庫(kù)訪問(wèn)接口。
  • 可以直接使用SQL語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)操作。
  • 適合對(duì)數(shù)據(jù)庫(kù)操作有更細(xì)粒度控制需求的開(kāi)發(fā)者。

2. sequelize:

  • 是一個(gè)功能強(qiáng)大的ORM(Object-Relational Mapping)庫(kù),支持多種數(shù)據(jù)庫(kù)包括SQLite。
  • 提供了面向?qū)ο蟮姆绞蕉x模型,便于操作數(shù)據(jù)庫(kù)。
  • 自動(dòng)構(gòu)建SQL查詢(xún)語(yǔ)句,簡(jiǎn)化數(shù)據(jù)庫(kù)操作。
  • 支持事務(wù)管理、關(guān)聯(lián)查詢(xún)等高級(jí)功能。
  • 適合需要使用ORM進(jìn)行數(shù)據(jù)庫(kù)操作或有復(fù)雜業(yè)務(wù)需求的開(kāi)發(fā)者。

3. knex:

  • 是一個(gè)SQL查詢(xún)構(gòu)建器,支持多種數(shù)據(jù)庫(kù)包括SQLite。
  • 使用鏈?zhǔn)秸{(diào)用方法構(gòu)建SQL查詢(xún)語(yǔ)句。
  • 支持靈活的查詢(xún)條件、聚合查詢(xún)、分頁(yè)等功能。
  • 可以直接執(zhí)行SQL語(yǔ)句。
  • 適合對(duì)數(shù)據(jù)庫(kù)操作有更高靈活性要求的開(kāi)發(fā)者。

哪種方式最好用取決于實(shí)際需求。如果需要更底層的數(shù)據(jù)庫(kù)訪問(wèn)接口或?qū)?shù)據(jù)庫(kù)操作有更細(xì)粒度的控制,可以選擇sqlite3模塊。如果需要使用ORM進(jìn)行數(shù)據(jù)庫(kù)操作或有復(fù)雜業(yè)務(wù)需求,可以選擇sequelize模塊。如果需要更靈活地構(gòu)建SQL查詢(xún)語(yǔ)句或有特定的查詢(xún)需求,可以選擇knex模塊。

一般是根據(jù)項(xiàng)目需求選擇適合的方式使用Node.js操作SQLite數(shù)據(jù)庫(kù)。

knex詳細(xì)介紹

官網(wǎng)介紹:

KneX可以在Node.js和瀏覽器中用作SQL查詢(xún)構(gòu)建器,但受WebSQL的限制(如不能刪除表或讀取模式)。 強(qiáng)烈反對(duì)在瀏覽器中編寫(xiě)在服務(wù)器上執(zhí)行的SQL查詢(xún),因?yàn)檫@可能會(huì)導(dǎo)致嚴(yán)重的安全漏洞。 在WebSQL之外構(gòu)建的瀏覽器主要用于學(xué)習(xí)目的-例如,您可以打開(kāi)控制臺(tái)并使用kneX對(duì)象在此頁(yè)面上構(gòu)建查詢(xún)。

KneX的主要目標(biāo)環(huán)境是Node.js,您將需要安裝KneX庫(kù),然后安裝相應(yīng)的數(shù)據(jù)庫(kù)庫(kù):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ù)庫(kù)驅(qū)動(dòng),我這里用的是sqlite數(shù)據(jù)庫(kù),所以需要安裝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ù)庫(kù)驅(qū)動(dòng)即可

初始化knex實(shí)例

const knex = require('knex')({
  client: 'sqlite3',
  connection: {
    filename: './database.sqlite'
  }
});

在實(shí)例化knex時(shí),可以傳入一些配置參數(shù)來(lái)進(jìn)行數(shù)據(jù)庫(kù)連接和其他相關(guān)配置。常用的配置參數(shù)如下:

client:指定數(shù)據(jù)庫(kù)類(lèi)型,比如sqlite3、mysql、postgresql等。

connection:指定數(shù)據(jù)庫(kù)連接信息,可以是一個(gè)URL字符串或一個(gè)包含連接信息的對(duì)象,如host、port、user、password、database等。

pool:連接池的配置,控制數(shù)據(jù)庫(kù)連接的復(fù)用和管理,常用的配置項(xiàng)有min、max、idleTimeoutMillis等。

migrations:遷移文件相關(guān)的配置,用于數(shù)據(jù)庫(kù)遷移管理,包括directory(遷移文件目錄)、tableName(存儲(chǔ)遷移記錄的表名)等。

seeds:種子數(shù)據(jù)相關(guān)的配置,用于初始化數(shù)據(jù)庫(kù),包括directory(種子數(shù)據(jù)文件目錄)等。

debug:是否開(kāi)啟調(diào)試模式,輸出SQL查詢(xún)語(yǔ)句和參數(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ù)庫(kù)類(lèi)型,指定了數(shù)據(jù)庫(kù)文件路徑。同時(shí)配置了連接池的最小連接數(shù)和最大連接數(shù)。定義了遷移文件和種子數(shù)據(jù)文件的目錄,以及遷移記錄表的表名。開(kāi)啟了調(diào)試模式,輸出SQL查詢(xún)語(yǔ)句和參數(shù)。

根據(jù)實(shí)際需求,可以根據(jù)以上配置參數(shù)進(jìn)行靈活的配置。具體的配置項(xiàng)及其含義可以參考knex的官方文檔。

創(chuàng)建數(shù)據(jù)庫(kù)表

在使用knex創(chuàng)建表之前,可以通過(guò)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)建表的操作;如果存在,則直接跳過(guò)創(chuàng)建表的步驟。這樣可以確保在創(chuàng)建表之前先判斷表是否已存在。

通過(guò)這種方式,可以避免重復(fù)創(chuàng)建表或?qū)е洛e(cuò)誤。需要注意的是,在實(shí)際開(kāi)發(fā)中,根據(jù)業(yè)務(wù)需求可能需要對(duì)表結(jié)構(gòu)進(jìn)行更精確的判斷,比如檢查是否存在特定的列等,可以根據(jù)具體情況進(jìn)行擴(kuò)展。

增刪改查

當(dāng)使用knex操作SQLite數(shù)據(jù)庫(kù)時(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);
});
  • 查詢(xún)數(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ù)庫(kù)的基本增刪改查操作。根據(jù)實(shí)際需求,可以使用knex提供的更多方法和功能來(lái)完成更復(fù)雜的數(shù)據(jù)庫(kù)操作。

以上就是使用node操作SQLite的方法的詳細(xì)內(nèi)容,更多關(guān)于node操作SQLite的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論