Ubuntu 22.04에서 Node.js와 함께 SQLite를 사용하는 방법
작성자는 DOnations 프로그램에 쓰기를 선택했습니다.
소개
SQLite는 데이터 저장을 위한 널리 사용되는 오픈 소스 SQL 데이터베이스 엔진입니다. 서버리스이므로 실행하는 데 서버가 필요하지 않습니다. 대신 컴퓨터 디스크에 있는 파일에서 데이터를 읽고 씁니다. 또한 SQLite는 구성이 필요하지 않습니다. 이로 인해 임베디드 시스템, 데스크톱/모바일 앱, 프로토타이핑 등을 위한 휴대성과 대중적인 선택이 됩니다.
Node.js와 함께 SQLite를 사용하려면 SQLite 데이터베이스에 연결하고 실행을 위해 애플리케이션에서 데이터베이스로 SQL 문을 보내는 데이터베이스 클라이언트가 필요합니다. 널리 사용되는 선택 중 하나는 SQLite 3에 대한 비동기 바인딩을 제공하는 node-sqlite3
패키지입니다.
이 자습서에서는 node-sqlite3
를 사용하여 SQLite 데이터베이스와의 연결을 만듭니다. 다음으로 테이블을 만들고 데이터를 데이터베이스에 삽입하는 Node.js 앱을 만듭니다. 마지막으로 node-sqlite3
를 사용하여 데이터베이스에서 데이터를 검색, 업데이트 및 삭제하도록 앱을 수정합니다.
전제 조건
이 자습서를 따르려면 다음이 필요합니다.
- 시스템에 설정된 Node.js 개발 환경. Ubuntu 22.04를 사용하는 경우 Node.js를 설치하고 로컬 개발 환경을 만드는 방법 자습서의 옵션 3에 따라 최신 버전의 Node.js를 설치합니다.\n
- 개발 환경에 설치된 SQLite3. Ubuntu 20.04에서 SQLite를 설치하고 사용하는 방법 자습서의 1단계를 따르십시오.\n테이블을 만들고 SQL 쿼리를 작성하여 테이블의 데이터를 검색하고 수정하는 방법에 대한 기본 지식. Ubuntu 20.04에서 SQLite를 설치하고 사용하는 방법 자습서의 2~6단계를 따르십시오.\n
- Node.js에서 첫 번째 프로그램을 작성하고 실행하는 방법 자습서에서 찾을 수 있는 Node.js 프로그램 작성 방법에 익숙합니다.\n
1단계 - 프로젝트 디렉토리 설정
이 단계에서는 프로젝트 디렉토리를 생성하고 node-sqlite3
를 종속 항목으로 다운로드합니다.
시작하려면 mkdir
명령을 사용하여 디렉토리를 만듭니다. 이 튜토리얼에서는 sqlite_demo
라고 부르지만 원하는 이름으로 바꿀 수 있습니다.
- mkdir sqlite_demo
다음으로 cd
명령을 사용하여 새로 생성된 디렉토리로 변경합니다.
- cd sqlite_demo
npm
명령을 사용하여 프로젝트 디렉토리를 npm 패키지로 초기화합니다.
- npm init -y
이 명령은 프로젝트의 중요한 메타데이터를 포함하는 package.json
파일을 생성합니다. -y
옵션은 npm
이 모든 기본값을 수락하도록 지시합니다.
명령을 실행하면 다음 출력이 화면에 표시됩니다.
OutputWrote to /home/sammy/sqlite_demo/package.json:
{
"name": "sqlite_demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
출력은 프로젝트의 중요한 메타데이터를 기록하는 속성이 포함된 package.json
파일이 생성되었음을 나타냅니다. 몇 가지 중요한 옵션은 다음과 같습니다.
name
: 프로젝트의 이름입니다.version
: 프로젝트 버전.main
: 프로젝트의 시작점입니다.
기본 옵션을 그대로 둘 수 있지만 기본 설정에 맞게 속성 값을 자유롭게 수정할 수 있습니다. 속성에 대한 자세한 내용은 npm의 package.json 설명서를 참조하세요.
다음으로 npm install
을 사용하여 node-sqlite3
패키지를 설치합니다.
- npm install sqlite3
패키지를 설치하면 출력이 다음과 같이 표시됩니다.
Outputadded 104 packages, and audited 105 packages in 9s
5 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
이제 node-sqlite3
를 설치했으므로 다음 섹션에서 이를 사용하여 SQLite 데이터베이스에 연결합니다.
2단계 - SQLite 데이터베이스에 연결
이 단계에서는 node-sqlite3
를 사용하여 Node.js 프로그램을 생성할 SQLite 데이터베이스에 연결합니다. 이 데이터베이스에는 다양한 상어와 해당 속성이 포함되어 있습니다. 데이터베이스 연결을 설정하기 위해 node-sqlite3
패키지는 Database
클래스를 제공합니다. 인스턴스화되면 클래스는 컴퓨터 디스크에 SQLite 데이터베이스 파일을 만들고 연결합니다. 연결이 설정되면 이후 섹션에서 데이터를 삽입, 검색 또는 업데이트하는 데 사용할 애플리케이션용 테이블을 생성합니다.
nano
또는 선호하는 텍스트 편집기를 사용하여 db.js
파일을 만들고 엽니다.
- nano db.js
db.js
파일에서 다음 코드를 추가하여 SQLite 데이터베이스와의 연결을 설정합니다.
const sqlite3 = require("sqlite3").verbose();
const filepath = "./fish.db";
function createDbConnection() {
const db = new sqlite3.Database(filepath, (error) => {
if (error) {
return console.error(error.message);
}
});
console.log("Connection with SQLite has been established");
return db;
}
첫 번째 줄에서 node-sqlite3
모듈을 프로그램 파일로 가져옵니다. 두 번째 줄에서 SQLite 데이터베이스가 상주할 경로와 데이터베이스 파일의 이름(이 경우 fish.db
filepath를 설정합니다. >.
다음 줄에서 SQLite 데이터베이스와의 연결을 설정하는 createDbConnection()
함수를 정의합니다. 함수 내에서 new
키워드를 사용하여 sqlite3.Database()
클래스를 인스턴스화합니다. 이 클래스는 파일 경로
와 콜백이라는 두 가지 인수를 사용합니다.
첫 번째 인수인 filepath
는 SQLite 데이터베이스의 이름과 경로를 허용합니다. 여기서는 ./fish.db
입니다. 두 번째 인수는 데이터베이스가 생성되고 데이터베이스에 대한 연결이 설정되면 실행되는 콜백입니다. 콜백은 데이터베이스 연결을 설정하려고 할 때 오류가 발생하는 경우 error
객체로 설정된 error
매개변수를 사용합니다. 콜백 내에서 if
문을 사용하여 오류가 있는지 확인합니다. 조건이 참이면 console.error()
메서드를 사용하여 오류 메시지를 기록합니다.
이제 sqlite3.Database()
클래스를 사용하여 인스턴스를 생성하면 프로젝트 디렉토리에 SQLite 데이터베이스 파일이 생성되고 db
에 저장된 데이터베이스 개체가 반환됩니다. 변수. 데이터베이스 개체는 테이블을 만들고 데이터를 삽입, 검색 또는 수정하는 SQL 문을 전달하는 데 사용할 수 있는 메서드를 제공합니다.
마지막으로 console.log()
를 호출하여 성공 메시지를 기록하고 db
변수에 데이터베이스 개체를 반환합니다.
다음으로 강조 표시된 코드를 추가하여 테이블을 만드는 함수를 만듭니다.
...
function createDbConnection() {
...
}
function createTable(db) {
db.exec(`
CREATE TABLE sharks
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(50) NOT NULL,
color VARCHAR(50) NOT NULL,
weight INTEGER NOT NULL
);
`);
}
createTable()
함수는 SQLite 데이터베이스에 테이블을 생성합니다. 데이터베이스 개체 db
를 매개변수로 사용합니다. createTable()
함수 내에서 주어진 SQL 문을 데이터베이스로 보내는 db
데이터베이스 개체의 exec()
메서드를 호출합니다. 실행됩니다. exec()
메서드는 결과 행을 반환하지 않는 쿼리에만 사용됩니다.
exec()
메서드에 전달된 CREATE TABLE sharks...
SQL 문은 다음 필드가 있는 테이블 sharks
를 생성합니다.
ID
:INTEGER
데이터 유형의 값을 저장합니다.PRIMARY KEY
제약 조건은 열을 기본 키로 지정하고AUTOINCREMENT
는 테이블의 각 행에 대한ID
열 값을 자동으로 증가시키도록 SQLite에 지시합니다.name
: 최대 50자의VARCHAR
데이터 유형을 사용하여 상어의 이름을 자세히 설명합니다.NOT NULL
제약 조건은 필드가 NULL 값을 저장할 수 없도록 합니다.color
: 최대 50자의VARCHAR
데이터 유형을 사용하여 상어의 색상을 나타냅니다.NOT NULL
제약 조건은 필드가 NULL 값을 허용하지 않아야 함을 나타냅니다.weight
:INTEGER
데이터 유형을 사용하여 상어의 무게를 킬로그램으로 저장하고NOT NULL
제약 조건을 사용하여 NULL 값을 보장합니다. 허용되지 않습니다.
동일한 db.js
파일에서 강조 표시된 코드를 추가하여 createTable()
함수를 호출합니다.
function createDbConnection() {
const db = new sqlite3.Database(filepath, (error) => {
if (error) {
return console.error(error.message);
}
createTable(db);
});
console.log("Connection with SQLite has been established");
return db;
}
function createTable(db) {
...
}
콜백이 실행되면 db
데이터베이스 개체를 인수로 사용하여 createTable()
함수를 호출합니다.
다음으로 createDbConnection()
함수를 호출하기 위해 다음 줄을 추가합니다.
...
function createDbConnection() {
...
}
function createTable(db) {
...
}
module.exports = createDbConnection();
이전 코드에서 데이터베이스에 대한 연결을 설정하고 데이터베이스 개체를 반환하는 createDbConnection()
함수를 호출합니다. 그런 다음 module.exports
를 사용하여 다른 파일에서 참조할 수 있도록 데이터베이스 개체를 내보냅니다.
이제 파일에 다음이 포함됩니다.
const sqlite3 = require("sqlite3").verbose();
const filepath = "./fish.db";
function createDbConnection() {
const db = new sqlite3.Database(filepath, (error) => {
if (error) {
return console.error(error.message);
}
createTable(db);
});
console.log("Connection with SQLite has been established");
return db;
}
function createTable(db) {
db.exec(`
CREATE TABLE sharks
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(50) NOT NULL,
color VARCHAR(50) NOT NULL,
weight INTEGER NOT NULL
);
`);
}
module.exports = createDbConnection();
파일을 저장하고 종료합니다. nano
를 사용하는 경우 CTRL+X
를 눌러 종료하고 y
를 눌러 변경 사항을 저장한 다음 ENTER
를 누릅니다. 파일명을 확인합니다.
node
명령을 사용하여 db.js
파일을 실행합니다.
- node db.js
출력은 데이터베이스 연결이 성공적으로 설정되었음을 나타냅니다.
OutputConnection with SQLite has been established
다음으로 ls
명령을 사용하여 fish.db
데이터베이스 파일이 생성되었는지 확인합니다.
- ls
Outputdb.js fish.db node_modules package-lock.json package.json
출력에 fish.db
데이터베이스 파일이 표시되면 데이터베이스가 성공적으로 생성되었음을 확인할 수 있습니다.
이제 db.js
파일을 실행할 때마다 createTable()
함수를 호출하여 데이터베이스에 테이블을 생성합니다. 이미 존재하는 테이블을 만들려고 하면 SQLite가 트리거되어 오류가 발생합니다. 이를 확인하려면 node
명령으로 db.js
파일을 다시 실행하십시오.
- node db.js
이번에는 다음 출력과 같이 오류가 표시됩니다.
OutputConnection with SQLite has been established
undefined:0
[Error: SQLITE_ERROR: table sharks already exists
Emitted 'error' event on Database instance at:
] {
errno: 1,
code: 'SQLITE_ERROR'
}
Node.js v17.6.0
오류 메시지는 sharks
테이블이 이미 있음을 나타냅니다. node
명령을 처음 실행할 때 fish
데이터베이스와 sharks
테이블이 생성되었기 때문입니다. 명령을 다시 실행하면 createTable()
함수가 두 번째로 다시 실행되어 테이블이 이미 존재하므로 오류가 발생합니다.
이 오류는 데이터베이스 개체 메서드를 사용하여 다른 파일에서 데이터베이스를 조작하려고 할 때마다 트리거됩니다. 예를 들어 다음 단계에서는 데이터베이스에 데이터를 삽입하는 파일을 만듭니다. 데이터베이스 개체를 사용하려면 db.js
파일을 가져와 데이터베이스에 데이터를 삽입하는 관련 메서드를 호출합니다. 파일을 실행하면 db.js
가 실행되어 동일한 오류가 발생합니다.
이 문제를 해결하려면 fs
모듈의 existsSync()
메서드를 사용하여 fish.db
데이터베이스 파일이 있는지 확인합니다. 프로젝트 디렉토리. 데이터베이스 파일이 존재하는 경우 createTable()
함수를 호출하지 않고 데이터베이스에 대한 연결을 설정합니다. 존재하지 않는 경우 연결을 설정하고 createTable()
함수를 호출합니다.
이렇게 하려면 편집기에서 db.js
를 한 번 더 엽니다.
- nano db.js
db.js
파일에서 강조 표시된 코드를 추가하여 데이터베이스 파일이 있는지 확인합니다.
const fs = require("fs");
const sqlite3 = require("sqlite3").verbose();
const filepath = "./fish.db";
function createDbConnection() {
if (fs.existsSync(filepath)) {
return new sqlite3.Database(filepath);
} else {
const db = new sqlite3.Database(filepath, (error) => {
if (error) {
return console.error(error.message);
}
createTable(db);
});
console.log("Connection with SQLite has been established");
return db;
}
}
먼저 파일 시스템과 상호 작용하는 데 사용되는 fs
모듈을 가져옵니다. 둘째, 추가된 if
문에서 fs.existSync()
메서드를 호출하여 주어진 인수에 파일이 있는지 확인합니다. 이 파일은 데이터베이스 파일 <./fish.db 여기. 파일이 존재하면 데이터베이스 파일 경로로 sqlite3.Database()
를 호출하고 콜백을 생략합니다. 그러나 파일이 존재하지 않는 경우 데이터베이스 인스턴스를 생성하고 콜백에서 createTable()
함수를 호출하여 데이터베이스에 테이블을 생성합니다.
이제 전체 파일이 다음과 같이 표시됩니다.
const fs = require("fs");
const sqlite3 = require("sqlite3").verbose();
const filepath = "./fish.db";
function createDbConnection() {
if (fs.existsSync(filepath)) {
return new sqlite3.Database(filepath);
} else {
const db = new sqlite3.Database(filepath, (error) => {
if (error) {
return console.error(error.message);
}
createTable(db);
});
console.log("Connection with SQLite has been established");
return db;
}
}
function createTable(db) {
db.exec(`
CREATE TABLE sharks
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(50) NOT NULL,
color VARCHAR(50) NOT NULL,
weight INTEGER NOT NULL
);
`);
}
module.exports = createDbConnection();
변경을 완료하면 파일을 저장하고 닫습니다.
db.js
파일이 여러 번 실행될 때 오류가 발생하지 않도록 하려면 rm
이 포함된 fish.db
파일을 삭제하십시오. 새로 시작하는 명령:
- rm fish.db
db.js
파일을 실행합니다.
- node db.js
OutputConnection with SQLite has been established
이제 db.js
가 데이터베이스에 연결되고 파일을 실행하여 db.js
파일의 모든 후속 재실행에 대해 테이블을 다시 생성하려고 시도하지 않는지 확인합니다. 다시:
- node db.js
이제 더 이상 오류가 발생하지 않는다는 것을 알 수 있습니다.
이제 SQLite 데이터베이스에 대한 연결을 설정하고 테이블을 만들었으므로 데이터베이스에 데이터를 삽입합니다.
3단계 - SQLite 데이터베이스에 데이터 삽입
이 단계에서는 node-sqlite3
모듈을 사용하여 SQLite 데이터베이스에 데이터를 삽입하는 함수를 생성합니다. 명령줄 인수로 삽입하려는 데이터를 프로그램에 전달합니다.
텍스트 편집기에서 insertData.js
파일을 만들고 엽니다.
- nano insertData.js
insertData.js
파일에서 다음 코드를 추가하여 명령줄 인수를 가져옵니다.
const db = require("./db");
function insertRow() {
const [name, color, weight] = process.argv.slice(2);
}
첫 번째 줄에서는 이전 단계에서 db.js
파일로 내보낸 데이터베이스 개체를 가져옵니다. 두 번째 줄에서 테이블에 데이터를 삽입하는 데 곧 사용할 insertRow()
함수를 정의합니다. 함수에서 process.argv
는 배열의 모든 명령줄 인수를 반환합니다. 인덱스 0
의 첫 번째 요소에는 노드에 대한 경로가 포함됩니다. 색인 1
의 두 번째 요소는 JavaScript 프로그램의 파일 이름을 저장합니다. 인덱스 2
에서 시작하는 모든 후속 요소에는 파일에 전달한 명령줄 인수가 포함되어 있습니다. 처음 두 인수를 건너뛰려면 JavaScript의 slice()
메서드를 사용하여 배열의 얕은 복사본을 만들고 인덱스 2
에서 배열 끝까지 요소를 반환합니다.
다음으로 강조 표시된 코드를 추가하여 데이터베이스에 데이터를 삽입합니다.
const db = require("./db");
function insertRow() {
const [name, color, weight] = process.argv.slice(2);
db.run(
`INSERT INTO sharks (name, color, weight) VALUES (?, ?, ?)`,
[name, color, weight],
function (error) {
if (error) {
console.error(error.message);
}
console.log(`Inserted a row with the ID: ${this.lastID}`);
}
);
}
앞의 코드에서 db.run()
메서드를 호출합니다. 이 메서드는 SQL 문, 배열 및 콜백의 세 가지 인수를 사용합니다. 첫 번째 인수 INSERT INTO sharks...
는 데이터베이스에 데이터를 삽입하는 SQL 문입니다. INSERT
문의 VALUES
문은 삽입해야 하는 쉼표로 구분된 값 목록을 사용합니다. 값을 직접 전달하는 대신 ?
자리 표시자를 전달하고 있음에 유의하십시오. 이것은 SQL 주입 공격을 피하기 위한 것입니다. 실행하는 동안 SQLite는 명령줄 인수 값을 포함하는 배열인 db.run()
메서드 두 번째 인수에 전달된 값으로 자리 표시자를 자동으로 대체합니다.
마지막으로 db.run()
메서드의 세 번째 인수는 데이터가 테이블에 성공적으로 삽입되었을 때 실행되는 콜백입니다. 오류가 있으면 오류 메시지가 콘솔에 기록됩니다. 삽입에 성공하면 this.lastID
가 반환한 새로 삽입된 행의 ID로 성공 메시지를 기록합니다.
이제 강조 표시된 줄을 추가하여 insertRow()
함수를 호출합니다.
const db = require("./db");
function insertRow() {
const [name, color, weight] = process.argv.slice(2);
db.run(
`INSERT INTO sharks (name, color, weight) VALUES (?, ?, ?)`,
[name, color, weight],
function (error) {
if (error) {
console.error(error.message);
}
console.log(`Inserted a row with the ID: ${this.lastID}`);
}
);
}
insertRow();
파일을 저장하고 닫은 다음 상어 이름, 색상 및 무게 인수를 사용하여 파일을 실행합니다.
- node insertData.js sammy blue 1900
출력은 행이 기본 ID가 1
인 테이블에 삽입되었음을 나타냅니다.
OutputInserted a row with the ID: 1
다른 인수를 사용하여 명령을 다시 실행하십시오.
- node insertData.js max white 2100
OutputInserted a row with the ID: 2
앞의 명령을 실행하면 sharks
테이블에 두 개의 행이 생성됩니다.
이제 SQLite 데이터베이스에 데이터를 삽입할 수 있으므로 다음으로 데이터베이스에서 데이터를 검색합니다.
4단계 - SQLite 데이터베이스에서 데이터 검색
이 단계에서는 node-sqlite3
모듈을 사용하여 SQLite 데이터베이스의 sharks
테이블에 저장된 모든 데이터를 검색하고 콘솔에 로그인합니다.
먼저 listData.js
파일을 엽니다.
- nano listData.js
listData.js
파일에서 다음 코드를 추가하여 모든 행을 검색합니다.
const db = require("./db");
function selectRows() {
db.each(`SELECT * FROM sharks`, (error, row) => {
if (error) {
throw new Error(error.message);
}
console.log(row);
});
}
먼저 db.js
파일에서 데이터베이스 개체를 가져옵니다. 둘째, SQLite 데이터베이스의 모든 행을 검색하는 selectRows()
함수를 정의합니다. 함수 내에서 데이터베이스 개체 db
의 each()
메서드를 사용하여 데이터베이스에서 행을 하나씩 검색합니다. each()
메서드는 SQL 문과 콜백이라는 두 가지 인수를 사용합니다.
첫 번째 인수 SELECT
는 sharks
테이블의 모든 행을 반환합니다. 두 번째 인수는 데이터베이스에서 행이 검색될 때마다 실행되는 콜백입니다. 콜백에서 오류를 확인합니다. 오류가 있는 경우 throw
문을 사용하여 사용자 지정 오류를 만듭니다. 검색 중에 오류가 발생하지 않으면 데이터가 콘솔에 기록됩니다.
이제 강조 표시된 코드를 추가하여 selectRows()
함수를 호출합니다.
const db = require("./db");
function selectRows() {
db.each(`SELECT * FROM sharks`, (error, row) => {
if (error) {
throw new Error(error.message);
}
console.log(row);
});
}
selectRows();
파일을 저장하고 종료한 다음 파일을 실행합니다.
- node listData.js
명령을 실행하면 다음과 같이 표시되는 출력이 표시됩니다.
Output{ ID: 1, name: 'sammy', color: 'blue', weight: 1900 }
{ ID: 2, name: 'max', color: 'white', weight: 2100 }
출력에는 이전 단계에서 sharks
테이블에 삽입한 모든 행이 표시됩니다. node-sqlite3
모듈은 각 SQL 결과를 JavaScript 객체로 변환합니다.
이제 SQLite 데이터베이스에서 데이터를 검색할 수 있으므로 SQLite 데이터베이스의 데이터를 업데이트합니다.
5단계 - SQLite 데이터베이스에서 데이터 수정
이 단계에서는 node-sqlite3
모듈을 사용하여 SQLite 데이터베이스의 행을 업데이트합니다. 이를 위해 수정하려는 행의 기본 ID와 행을 업데이트하려는 값을 포함하는 명령줄 인수를 프로그램에 전달합니다.
텍스트 편집기에서 updateData.js
파일을 만들고 엽니다.
- nano updateData.js
updateData.js
파일에서 다음 코드를 추가하여 레코드를 업데이트합니다.
const db = require("./db");
function updateRow() {
const [id, name] = process.argv.slice(2);
db.run(
`UPDATE sharks SET name = ? WHERE id = ?`,
[name, id],
function (error) {
if (error) {
console.error(error.message);
}
console.log(`Row ${id} has been updated`);
}
);
}
updateRow();
먼저 db.js
파일에서 데이터베이스 개체를 가져옵니다. 둘째, 데이터베이스의 행을 업데이트하는 updateRow
함수를 정의합니다. 함수 내에서 명령줄 인수를 id
및 name
변수로 압축 해제합니다. id
변수에는 업데이트하려는 행의 기본 ID가 포함되고 name
에는 이름 필드에 반영할 값이 포함됩니다.
다음으로 SQL 문과 콜백 인수를 사용하여 db.run()
함수를 호출합니다. UPDATE
SQL 문은 name
열을 현재 값에서 name
변수에 전달된 값으로 변경합니다. WHERE
절은 id
변수에 ID가 있는 행만 업데이트되도록 합니다. db.run()
메서드는 값이 업데이트되면 실행되는 콜백인 두 번째 인수를 사용합니다.
마지막으로 updateRow()
함수를 호출합니다.
변경을 마치면 파일을 저장하고 닫습니다.
변경하려는 행의 id
와 새 이름
을 사용하여 updateData.js
파일을 실행합니다.
- node updateData.js 2 sonny
OutputRow 2 has been updated
이름이 변경되었는지 확인합니다.
- node listData.js
명령을 실행하면 출력은 다음과 유사합니다.
Output{ ID: 1, name: 'sammy', color: 'blue', weight: 1900 }
{ ID: 2, name: 'sonny', color: 'white', weight: 2100 }
출력은 ID가 2
인 행에 이제 name
필드의 값으로 sonny
가 있음을 나타냅니다.
이를 통해 이제 데이터베이스의 행을 업데이트할 수 있습니다. 다음으로 SQLite 데이터베이스에서 데이터를 삭제합니다.
6단계 - SQLite 데이터베이스에서 데이터 삭제
이 섹션에서는 node-sqlite3
를 사용하여 SQLite 데이터베이스의 테이블에서 행을 선택하고 삭제합니다.
텍스트 편집기에서 deleteData.js
파일을 만들고 엽니다.
- nano deleteData.js
deleteData.js
파일에서 다음 코드를 추가하여 데이터베이스에서 행을 삭제합니다.
const db = require("./db");
async function deleteRow() {
const [id] = process.argv.slice(2);
db.run(`DELETE FROM sharks WHERE id = ?`, [id], function (error) {
if (error) {
return console.error(error.message);
}
console.log(`Row with the ID ${id} has been deleted`);
});
}
deleteRow();
먼저 db.js
파일에서 데이터베이스 개체를 가져옵니다. 두 번째로 sharks
테이블에서 행을 삭제하는 deleteRow()
를 정의합니다. 함수 내에서 기본 키 ID의 압축을 풀고 id
변수에 저장합니다. 다음으로 두 개의 인수를 사용하는 db.run()
을 호출합니다. 첫 번째 인수는 sharks
테이블의 행을 삭제하는 DELETE from sharks...
SQL 문입니다. WHERE
절은 id
변수에 ID가 있는 행만 삭제되도록 합니다. 두 번째 인수는 행이 삭제되면 실행되는 콜백입니다. 성공하면 함수는 성공 메시지를 기록합니다. 그렇지 않으면 콘솔에 오류를 기록합니다.
마지막으로 deleteRow()
함수를 호출합니다.
파일을 저장하고 닫은 후 다음 명령을 실행합니다.
- node deleteData.js 2
OutputRow with the ID 2 has been deleted
다음으로 행이 삭제되었는지 확인합니다.
- node listData.js
명령을 실행하면 출력이 다음과 유사하게 표시됩니다.
Output{ ID: 1, name: 'sammy', color: 'blue', weight: 1900 }
ID가 2
인 행은 더 이상 결과에 없습니다. 이것은 행이 삭제되었음을 확인합니다.
이제 node-sqlite3
모듈을 사용하여 SQLite 데이터베이스에서 행을 삭제할 수 있습니다.
결론
이 기사에서는 node-sqlite3
모듈을 사용하여 SQLite 데이터베이스에 연결하고 테이블을 만드는 Node.js 앱을 만들었습니다. 다음으로 데이터베이스에서 데이터를 삽입, 검색 및 업데이트하도록 앱을 수정했습니다. 마지막으로 데이터베이스의 데이터를 삭제하도록 앱을 수정했습니다.
node-sqlite3
메서드에 대한 자세한 내용은 Node.js 코딩 방법 시리즈를 참조하세요.