1.客户端常用的存储方式:IndexedDB(IndexedDatabaseAPI)
2.真香!Python开发工程师都选择这个数据库:就因为它免费?我不信
3.使用 Node.js、MongoDB、Fastify 构建 API 服务
客户端常用的存储方式:IndexedDB(IndexedDatabaseAPI)
IndexedDB
IndexedDB全称是IndexedDatabaseAPI,用于浏览器中存储结构化数据的。
IndexedDB是文华奇点指标公式源码类似于MySQL的数据库,区别是IndexedDB使用对象存储而不是表格保存数据,使用IndexedDB数据库的第一步是调用indexedDB.open()方法,并给它传入一个要打开的数据库名称,如果库已经存在,会发送一个打开它的请求,如果不存在,会创建并打开这个数据库的请求。
demo.js
letdb,request,version=1;request=indexedDB.open("manage",version);request.onerror=(event)=>console.log(`open:${ event.target.errorCode}`);request.onsuccess=(event)=>{ db=event.target.result;};建立了数据库连接之后,下一步就是使用对象存储,如果数据库版本与期待的不一致,那可能需要创建对象存储。
demo.js
lettest={ id:'',username:"admin",age:"",}从上面的demo看出,id必须是全局唯一的,因为大多数情况下访问数据的凭据。这个键很重要,所以创建对象存储时必须指定一个键。
创建了对象存储之后,减肥网站源码剩下的所有操作都是通过事务完成的,创建了对象存储之后,剩下的所有操作都是通过事务完成的。
创建事务demo.js
lettransaction=db.transaction();访问的对象存储的名称:
lettransaction=db.transaction("username");参数传入一个字符串数组:
lettransaction=db.transaction(["username","admin"]);每个事务都以只读方式访问数据。要修改访问模式,可以传入第二个参数,可以是"readonly"、"readwrite"或"versionchange"。
lettransaction=db.transaction("username","readwrite");有了事务的引用,就可以使用objectStore()方法并传入对象存储的名称以访问特定的对象存储。然后,可以使用add()和put()方法添加和更新对象,使用get()取得对象,使用delete()删除对象,使用clear()删除所有对象。
事务对象本身也有事件处理程序:onerror和oncomplete。
transaction.onerror=(event)=>{ //整个事务被取消};transaction.oncomplete=(event)=>{ //整个事务成功完成};注意:不能通过oncomplete事件处理程序的event对象访问get()请求返回的任何数据。
当我们拿到对象存储的引用,可以使用add()或put()写入数据,每次调用add()或put()都会创建对象存储的新更新请求,想验证请求成功与否,可以把请求对象保存到一个变量,微俱聚源码添加onerror和onsuccess事件处理程序。
真香!Python开发工程师都选择这个数据库:就因为它免费?我不信
既然我们要使用关系数据库,就必须选择一个关系数据库。
目前广泛使用的关系数据库也就这么几种:付费的商用数据库和免费的开源数据库。
付费的商用数据库,如Oracle、SQL Server、DB2等,虽然不开源且需要付费,但其优势在于提供了完善的客户服务和技术支持,确保了数据库的稳定性和安全性。
然而,无论是Google、Facebook,还是国内的BAT,无一例外都选择了免费的开源数据库,主要因为开源数据库能够适应快速迭代和开放创新的现代开发环境,同时也降低了企业的成本。
作为Python开发工程师,选择哪个免费数据库呢?答案是秒赞吧源码MySQL。MySQL之所以成为首选,是因为它普及率最高,出了错,可以很容易找到解决方法。更重要的是,围绕MySQL有一大堆监控和运维的工具,安装和使用都非常方便。
MySQL在Web世界中使用最广泛,具有高并发处理能力,同时占用内存相对较大。它内部有多种数据库引擎,其中最常用的引擎是支持数据库事务的InnoDB,这使得MySQL在高负载环境中表现优异。
SQLite是一种轻量级、可嵌入的数据库,适合桌面和移动应用,但其并发性能受限。与之相比,MySQL为服务器端设计,能承受高并发访问,且其配置和使用相对复杂。天天炫舞源码
在安装MySQL时,可以直接从MySQL官方网站下载Community Server 5.6.x版本。MySQL跨平台,选择对应的平台下载安装文件即可。安装时,输入root用户的口令并记住,建议设置为password以确保安全。在Windows上安装时,请选择UTF-8编码,以便正确处理中文。
在Mac或Linux上,需要编辑MySQL的配置文件,将数据库默认编码全部改为UTF-8。MySQL配置文件默认存放在/etc/my.cnf或/etc/mysql/my.cnf。重启MySQL后,通过MySQL客户端命令行检查编码设置。
对于需要支持Unicode标准和显示emoji字符的情况,MySQL版本≥5.5.3时,可以将编码设置为utf8mb4,它与utf8兼容。
安装MySQL驱动时,由于MySQL服务器运行独立于进程并提供网络服务,需要使用支持Python的MySQL驱动连接到MySQL服务器。MySQL官方提供了mysql-connector-python驱动,但安装时需使用pip命令加上参数--allow-external。如果安装失败,可以尝试使用另一个驱动。
演示如何连接到MySQL服务器的test数据库,使用Python的DB-API接口操作MySQL数据库与SQLite类似。在Python中使用SQLite前,需要明确几个概念:表、数据库连接(Connection)和游标(Cursor)。表是存放关系数据的集合,数据库通常包含多个表,表之间通过外键关联。
在Python中操作数据库时,需要导入数据库对应的驱动,通过Connection对象和Cursor对象执行各种SQL语句。确保在操作完毕后关闭Connection对象和Cursor对象,以避免资源泄露。
在Python交互式命令行中实践数据库操作,如连接数据库、执行SQL语句(包括插入、更新、删除和查询)并获取执行结果。使用DB-API时,应确保正确处理Connection和Cursor对象的打开和关闭,以确保数据库资源的高效利用和管理。
总的来说,MySQL凭借其广泛的应用场景、高并发处理能力、丰富的生态系统和易于使用的特性,成为了Python开发工程师的首选数据库。在选择数据库时,应综合考虑应用需求、性能、可扩展性和社区支持等因素,确保选择最适合项目的解决方案。
使用 Node.js、MongoDB、Fastify 构建 API 服务
构建使用 Node.js、MongoDB、Fastify 和 Swagger 的 REST API 服务,首先需要准备的技术框架和环境如下:
打开终端,创建项目目录 `restful-api`,进入目录后创建代码文件夹 `src`,在 `src` 目录下创建 `index.js` 文件。
初始化项目,执行 `npm init` 命令,生成 `package.json` 文件。
安装相关依赖项,包括 `nodemon`、`Mongoose`、`Fastify`、`fastify-swagger` 和 `boom`。这些工具将提供自动重启、数据建模、高性能 Web 开发体验、API 文档生成以及错误处理等功能。
在 `index.js` 中引入 `Fastify` 框架并声明第一个路由,设置服务运行端口为 ,开启内置 logger。
启动服务,运行 `nodemon index.js` 命令。
使用浏览器访问 `http://.0.0.1:/`,查看返回信息。
下一步是设置 MongoDB 数据库。
启动 MongoDB 实例,使用 Mongoose 连接数据库。在 `index.js` 中增加代码以创建并连接数据库,数据库名称为 `crayon-restful-service`。
在 `models` 目录下创建 `Coffee.js` 文件,定义 Coffee 模型。
在 `controllers` 目录下创建 `coffeeController.js` 文件,实现 Coffee 数据的 CRUD 操作。
在 `routes` 目录下创建 `index.js` 文件,定义接口路由并设置控制器方法。
为每个路由设置 `id` 参数,用于传递参数。
创建 API 文档,使用 Swagger 对文档进行支持。在 `config` 目录下创建 `swagger.js` 文件,配置 Swagger 插件。
在 `docs` 目录下创建 `coffees.js` 文件,定义 API 文档。导入并更新每个路由,增加 `schema` 属性。
使用 Postman 测试 API 服务。
关于部署,可以使用 `pm2` 或 `docker` 进行,具体部署方法不在此处展开。
总结,通过上述步骤构建了一个简单的 REST API 服务,可以进一步迭代和扩展,包括增加模型验证、列表分页等功能,以满足实际项目需求。