信阳公司网站建设,数字广东网络建设有限公司是国企吗,淄博周村网站建设方案,凡科建的网站怎么做seoSql增删改查
本节使用knex作为sql框架#xff0c;以sqlite数据库为例
准备工作
knex是一个运行在各自数据库Driver上的框架#xff0c;因此需要安装相应的js版数据库Driver#xff0c;如: PostgreSQL - pg, mysql/mariadb - mysql, sqlite - sqlite3…
安装…Sql增删改查
本节使用knex作为sql框架以sqlite数据库为例
准备工作
knex是一个运行在各自数据库Driver上的框架因此需要安装相应的js版数据库Driver如: PostgreSQL - pg, mysql/mariadb - mysql, sqlite - sqlite3…
安装sqlite3依赖 npm install sqlite3安装knex依赖 npm install knex引入依赖
const app express();
const knex require(knex);建议安装一款合适的数据库界面工具笔者使用的是Beekeeper Studio.
创建项目
拷贝第一节HelloWorld的项目
创建sqlite连接
指明client为sqlite3刚刚安装的sqlite3依赖并指明要操作的sqlite数据库路径
const sqlite knex({client: sqlite3,connection: {filename: ./data.db,},
});创建了一个连接实例后会自动创建一个连接池因此初始化数据库只会发生一次
连接配置
sqlite3默认的是单连接如果你希望连接池有更多的连接创建时带上pool:
const sqlite knex({client: sqlite3,connection: {filename: ./data.db,},pool: { min: 0, max: 7 }
});创建连接池的回调
用于检查连接池是否正常通常不需要这步
pool: {afterCreate: function (conn, done) {//...}
}acquireConnectionTimeout
连接超时时间
日志
knex内置了打印警告、错误、弃用和调试信息的日志函数如果你希望自定义日志操作可以在log项里重写它们
log: {warn(message) {},error(message) {},deprecate(message) {},debug(message) {}
}数据表
建表
语法: sqlite.schema.createTable(表名, table{表结构})
添加一个PUT接口监听 127.0.0.1:8080/db/:tbname 根据我们想创建的表名尝试创建一个表注意: sql执行是异步的为了得到结果建议使用 async/await 语法糖当然你就是喜欢地狱回调也不是不行
app.put(/db/:tbname, async function (req, res) {let resultSet null;try {// Create a tableresultSet await sqlite.schema.createTable(req.params.tbname, table {table.increments(id);table.string(uname);table.string(passwd);})// Finally, add a catch statement} catch(e) {console.error(e);resultSet e;};res.json(resultSet);
});瞅瞅控制台:
sqlite does not support inserting default values. Set the useNullAsDefault flag to hide this warning. (see docs https://knexjs.org/guide/query-builder.html#insert).嗯sqlite不支持default不用管他去看数据库反正成功创建了user表你要是加了useNullAsDefault这个flag反而会告诉你 not supported by node-sqlite3
const sqlite knex({client: sqlite3,connection: {filename: ./data.db,},
});删表
语法: sqlite.schema.deleteTable(表名)
app.delete(/db/:tbname, async function (req, res) {try {// Delete a tableawait sqlite.schema.dropTable(req.params.tbname);// Finally, add a catch statement} catch(e) {console.error(e);};res.json(null);
});
表记录crud
增
往user表里面插入一条新的记录
app.use(express.json({type: application/json}));
app.put(/db/:tbname/record, async function (req, res) {/*前端请求体格式:{uname: evanp,passwd: iloveu}*/let resultSet null;try {// Insert a recordresultSet await sqlite(req.params.tbname).insert(req.body);// Finally, add a catch statement} catch(e) {console.error(e);resultSet e;};res.json(resultSet);
});尝试用api调试工具PUT 127.0.0.1:8080/db/user/record携带相应的请求体将会得到[1]这是影响的记录数1代表成功了
查
从user表里查询uname我们刚刚插入的记录
app.get(/db/:tbname/record, async function (req, res) {//前端携带query: unameevanplet resultSet null;try {// select a record where unamexxxresultSet await sqlite(req.params.tbname).select(*).where(uname,req.query.uname);// Finally, add a catch statement} catch(e) {console.error(e);resultSet e;};res.json(resultSet);
});尝试用api调试工具GET 127.0.0.1:8080/db/user/record?unameevanp将会得到:
[{id: 1,uname: evanp,passwd: iloveu}
]改
接下来我们修改unameevanp这条记录的passwd为123456
app.post(/db/:tbname/record, async function (req, res) {//前端携带query: unameevanp/*前端请求体格式:{passwd: 123456}*/let resultSet null;try {// select a record where unamexxxresultSet await sqlite(req.params.tbname).update(req.body).where(uname,req.query.uname);// Finally, add a catch statement} catch(e) {console.error(e);resultSet e;};res.json(resultSet);
});尝试用api调试工具POST 127.0.0.1:8080/db/user/record?unameevanp并携带相应请求体将会得到: [1]这代表影响记录1条成功了
删
接下来我们删除unameevanp且passwd123456的这条记录
app.delete(/db/:tbname/record, async function (req, res) {/*前端请求体格式:{uname: evanp,passwd: 123456}*/let resultSet null;try {// select a record where unamexxxresultSet await sqlite(req.params.tbname).del().where(req.body);// Finally, add a catch statement} catch(e) {console.error(e);resultSet e;};res.json(resultSet);
});尝试用api调试工具DELETE 127.0.0.1:8080/db/user/record并携带相应请求体将会得到: [1]这代表影响记录1条成功了
原生sql
当然了如果你需要直接使用sql语句也是可以的调用raw(sqlStr)即可既可以作为某一段sql的绑定也可以直接当作整句sql
格式: knex.raw(sql, [bindings]
sqlite.raw(select * from user,[1]).then((resp){//..})在这里不做介绍
总结
以上给出了使用knex实现增删改查的基本操作这些方法并不是唯一的在实际开发中往往要应对更复杂的场景基础crud也是远远不够的 关于knex的更多拓展使用方法请移步knex官方文档https://knexjs.org/guide/
下一节-Sql-ORM增删改查