在前端开发中,我们经常要与后端数据库打交道,以获取数据或修改数据。而对于小型应用程序,SQLite数据库是一个非常不错的选择。然而,访问SQLite也需要一些工具。一个流行的选择是数据库ORM(对象关系映射)。在这个教程中,我们将探讨一个Node.js ORM SQLite-ORM。
什么是SQLite-ORM?
SQLite-ORM是一个轻量级的ORM框架,可以访问SQLite数据库。它使用Promise API,这样我们可以更轻松地编写异步代码。SQLite-ORM提供了完整的CRUD操作。例如,我们可以轻松地获取、添加、更新和删除记录。另外,SQLite-ORM还支持多对多关系。
安装sqlite-orm包
首先,我们需要在Node.js项目中安装sqlite-orm包。可以在控制台运行以下命令:
npm install sqlite-orm --save
这将在你的项目中安装sqlite-orm,并将其保存在npm package.json文件中。
创建一个SQLite数据库
在这个示例中,我们将创建一个简单的SQLite数据库,并在其中插入一些数据。我们需要SQLite3数据库的驱动程序。为此,我们需要安装sqlite3包:
npm install sqlite3 --save
一个简单的数据库示例可以像这样:
-- -------------------- ---- ------- ----- ------- - ----------------------------- ----- -- - --- ----------------------------- --------------- -- - -------------- ----- ----- - -- ------- ------- ---- ----------- ----- --------- --- ---- -------------- ---- ----- ---- ------------ ---------- ------ --- -- ---- --- ------ ------------ ---- -------------- ---- ----- ---- ------------ ---------- ------ --- -- ---- --- ------ ------- ---- -------------- ---- ----- ---- ------------ ---------- ------ --- -- ---- --- ------ ------- ---- ---展开代码
在这里,我们创建了一个下载到内存的SQLite数据库,并创建了todos表。我们还插入了三个例子,它们将在下面的代码示例中使用。
使用SQLite-ORM
现在我们已经了解了SQLite-ORM和SQLite数据库的一些基本知识,让我们开始使用它!
首先,我们需要导入sqlite-orm包并创建一个实例。在这个示例中,我们将使用上面创建的内存数据库:
-- -------------------- ---- ------- ----- --------- - ---------------------- ----- -------- - - ------- --------- ----------- - --------- ---------- - -- ----- -- - --- --------------------展开代码
查询
一旦创建了sqliteORM实例,我们就可以查询我们的数据库。SQLite-ORM提供了许多方法来访问我们的数据。例如,我们可以检索所有todo项:
db.select().from('todos').all().then(rows => { console.log(rows); });
这将返回一个数组,其中包含所有条目的对象。
输出:
-- -------------------- ---- ------- - - ----- -- -------------- ------ ------------ ------------ - -- - ----- -- -------------- ------ ------- ------------ - -- - ----- -- -------------- ------ ------- ------------ - - -展开代码
我们还可以使用一些条件过滤我们的查询结果。例如,我们可以只检索未完成的todo项:
db.select().from('todos').where({completed: 0}).all().then(rows => { console.log(rows); });
输出:
-- -------------------- ---- ------- - - ----- -- -------------- ------ ------------ ------------ - -- - ----- -- -------------- ------ ------- ------------ - -- - ----- -- -------------- ------ ------- ------------ - - -展开代码
插入记录
让我们将一个新的todo项添加到我们的数据库中:
db.insert().into('todos').set({id: 4, description: 'Learn GraphQL', completed: 0}).then(rows => { console.log(rows); });
输出:
{ "changes": 1, "lastInsertRowid": 4 }
更新记录
现在,让我们将一个简单的更新添加到我们的数据库中。
db.update('todos').set({completed: 1}).where({id: 1}).then(rows => { console.log(rows); });
输出:
{ "changes": 1 }
我们还可以一次更新多个项:
db.update('todos').set({completed: 1}).where({id: [1, 2]}).then(rows => { console.log(rows); });
输出:
{ "changes": 2 }
删除记录
让我们删除我们的数据库中的一个todo项。
db.delete().from('todos').where({id: 1}).then(rows => { console.log(rows); });
输出:
{ "changes": 1 }
多对多关系
在SQLite-ORM中,我们还可以轻松地处理多对多关系。让我们创建一个新的表格projects:
-- -------------------- ---- ------- --------------- -- - -------------- ----- -------- - -- ------- ------- ---- ---- ---- ---- -------------- ----- ------------- - ------- -------- ---------- -------- ------- --- --------- ------------ ------- --- --------- ---------- ----- ----- ------- --- ------------ ---------- -------- ---- ---- -------------- ---- -------- ---- ----- ------ --- ---- --- -------- ----- -------------- ---- -------- ---- ----- ------ --- ---- --- -------- ----- -------------- ---- ------------- --------- ----------- ------ --- ---- --- ---- -------------- ---- ------------- --------- ----------- ------ --- ---- --- ---- -------------- ---- ------------- --------- ----------- ------ --- ---- --- ---- ---展开代码
在这里,我们创建了一个projects表和一个todo_projects中间表。我们还为每个表添加了一些实例。请注意,todo_projects中间表旨在为优化多对多关系而用作连接。
现在,我们可以轻松地为我们的项目创建多对多关系,如下所示:
db.insert().into('todo_projects').set({todo_id: 2, project_id: 2}).then(rows => { console.log(rows); });
输出:
{ "changes": 1, "lastInsertRowid": 3 }
总结
SQLite-ORM是一个非常易于使用和轻量级的ORM框架,可用于Node.js应用程序中的SQLite数据库。它提供了完整的CRUD操作和支持多对多关系。在这个教程中,我们学习了如何创建一个SQLite数据库,使用SQLite-ORM查询、插入、更新和删除记录,并创建多对多关系。
希望这篇文章对您在使用sqlite-orm包方面有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600670a68ccae46eb111f266