1.独家食用指南系列|Android端SQLCipher的学习攻与防新编
2.收藏!Python内置的源码轻量级数据库竟如此好用!全网最实用sqlite3实战项目!学习
3.使用SQLite数据库加密敏感信息嵌入程序(3)
4.å¦ä½ç¼è¯SQLite-How To Compile SQLite
5.Python程序开发系列利用Peewee库创建SQLite数据库、源码建表并写入数据(案例+源码)
6.node-pre-gyp以及node-gyp的学习源码简单解析(以安装sqlite3为例)
独家食用指南系列|Android端SQLCipher的攻与防新编
欢迎来到本周技术拆解官的第二篇独家食用指南系列,主题聚焦于Android端的源码小区源码SQLCipher。如果您之前未了解过,学习可以回顾上篇指南进行预习。源码
本篇指南将带领大家重新审视SQLCipher,学习一个在安全性方面为Android SQLite数据库加密的源码工具。首先,学习让我们了解一下SQLite的源码优缺点,作为分析SQLCipher的学习基础。
SQLite作为轻量级数据库,源码具备易用性、学习易安装等优点,但也有性能和安全性上的局限。性能问题主要在于它在大并发、复杂查询等场景下可能遇到性能瓶颈;安全性方面,免费版本不支持加密,导致数据在未加密状态下容易被访问。
为解决这些问题,我们可以从性能优化和安全加固两个方面入手。性能优化包括改善并发机制、使用连接池、开启WAL模式等,以提升数据库读写效率。安全加固则推荐使用SQLCipher,通过加密数据库,保障数据安全。
SQLCipher基于SQLite接口设计,燕大夫即食燕窝溯源码标签采用AES加密算法,提供安全加密数据库功能。它通过自定义的接口实现加密流程,加密过程分为写操作时的数据加密和读操作时的数据解密。使用SQLCipher时,主要涉及类替换和加载加密SO库两个步骤,无需侵入原有APP逻辑。
在调试SQLCipher方面,Linux环境下的安装和生成加密库较为基础,可通过SQLiteStudio等工具进行可视化操作。最后,企业级应用在使用SQLCipher时通常会有额外的安全防护措施,例如百度汉语APP在数据库加载和秘钥获取上采取了多层保护。
本指南从原理、实战角度出发,详细介绍了SQLCipher的使用方法和安全加固流程。随着指南的深入,我们即将进入关于SQLite源码剖析的最后一篇,敬请期待。
在探索SQLCipher的过程中,我们不仅仅学习了如何使用这个工具,更重要的是理解了如何在实际应用中保护数据安全,为构建可靠的应用奠定基础。希望本指南对您的技术旅程有所帮助,期待您在实际项目中应用所学知识。
收藏!Python内置的轻量级数据库竟如此好用!全网最实用sqlite3实战项目!
今天我们将深入探讨 Python 内置的轻量级数据库 sqlite3 的使用方法与实战操作。对于那些希望避免复杂数据库安装过程的黄金量能副图指标公式源码用户,sqlite3 无疑是一个理想的选择。它无需独立的服务器进程,且数据库文件为 .db 后缀,支持跨平台直接访问,便捷高效。 让我们一起通过实际案例来掌握 sqlite3 的常用操作,以便在日常项目开发中灵活运用。主要内容
1. 读取数据并插入数据库
我们将以 TXT 文件为例,进行示范操作。TXT 文件为单列数据,以换行符分割,文件数量超过 个,数据总量达到 5 万以上。1.1 源代码
1.2 运行效果
1.3 重点代码解释
自动获取所有 TXT 文件名称和路径:为了方便使用,我们编写代码自动查找所有文件名称和路径,无需手动指定。 数据库创建与连接:利用 sqlite3.connect() 创建数据库,如果数据库文件不存在则自动创建。 创建表:执行 SQL 语句创建表 numbers,包含两个字段:id 和 number。 插入数据:优化文件打开方式,使用 with 语句提高效率,同时使用占位符功能自动插入数据。2. 数据库操作
2.1 连接数据库
通过指定数据库文件路径连接数据库,简化数据库管理。2.2 查询数据库中有哪些表
使用 SQL 查询语句查看数据库中所有表的名称。2.3 删除数据库中的某个表
执行 drop table 语句删除指定表。2.4 查询表结构
2.5 查询表中前 条记录
2.6 查询表中所有记录
2.7 查询表中不重复记录
2.8 将老表中的不重复记录插入新表
2.9 将特定结果写入文本文件(单列)
2. 将特定结果写入文本文件(多列)
2. 将特定结果写入 CSV 文件(多列)
2. 办公自动化案例
利用 sqlite3 进行数据导出,实现批量生成 TXT 文件,显著提高办公效率。期货指标特训营的指标源码 为了帮助您快速上手,所有源代码已发布至公众号智能演示,只需回复 "sqlite3" 即可获取下载链接。 期待您的实践与探索,享受 Python 数据库操作带来的便利!使用SQLite数据库加密敏感信息嵌入程序(3)
在前两篇文章中,我们探讨了如何使用工具和原生函数生成SQLite数据库,以及如何将生成的数据库作为资源嵌入到程序中使用。目标是实现程序运行时直接在内存中读取敏感信息,无需将资源保存到临时文件再获取信息的繁琐步骤。实现这一目标的关键在于SQLite的跨平台利器——虚拟文件系统(VFS)。
VFS是SQLite底层与操作系统交互的关键,它提供了一种抽象的文件系统接口,使得SQLite能够在不同操作系统上一致地工作。每当SQLite需要与操作系统通信时,它会调用VFS中的方法,VFS则调用具体的操作代码以满足请求。因此,将SQLite移植到新的操作系统仅需编写新的操作系统接口层,也就是“VFS”。
SQLite支持多个VFS,每个VFS都有唯一的名称,并且同一进程中的数据库连接可以同时使用不同的VFS。Windows版本自带多个内置VFS,其中“win”适用于大多数应用程序。VFS在SQLite源码中通过sqlite3_vfs对象结构定义。
要实现标准VFS,可以子类化三个对象:sqlite3_vfs(操作系统接口对象)、sqlite3_io_methods(操作系统接口文件虚拟方法对象)、sqlite3_file(操作系统文件对象)。玄铁c906源码分析实现时只需子类化sqlite3_vfs和sqlite3_io_methods,而sqlite3_file对象代表一个打开的文件。
sqlite3_file对象在打开文件时由sqlite3_vfs的xOpen方法构造,它跟踪文件状态,包含指向sqlite3_io_methods对象的指针,该指针仅适用于当前sqlite3_file对象。sqlite3_io_methods对象执行文件读写、大小查找、锁定与解锁、文件关闭等操作。
新构造的sqlite3_vfs通过sqlite3_vfs_register函数注册,sqlite3_file对象则从sqlite3_vfs的xOpen方法返回,指向一个sqlite3_io_methods对象实例。SQLite源码中定义了sqlite3_io_methods和sqlite3_file结构。
TBNSQLiteFile和TBNSQLiteVfs结构是Delphi版中用于实现SQLite文件和VFS的子类化接口。TBNSQLitFile结构扩展了sqlite3_file接口,增加了额外字段如实际路径、数据缓冲区和访问标志等。TBNSQLiteVfs结构实现自定义的sqlite3_vfs,构建了一个链表结构,用于管理VFS。
为了方便读取嵌入程序中的SQLite数据库,我们实现了一个名为TBNSQLitIoMethodUtils的类,作为sqlite3_io_methods的子类化实现。这个类主要实现了xRead和xFileSize方法,用于读取数据库文件数据。其他方法如xWrite等因为操作为只读性质,此处忽略实现,返回值为SQLITE_OK即可。实现代码通过静态方法简化,以匹配SQLite原生函数调用方式。
总结,通过精心设计的VFS、文件对象和IO方法实现,我们能够高效、安全地将敏感信息存储在嵌入程序的SQLite数据库中,并在程序运行时直接在内存中读取,无需额外的文件操作步骤。接下来,我们将深入探讨如何实现TBNSQLiteVfsUtils类以进一步优化VFS功能。
å¦ä½ç¼è¯SQLite-How To Compile SQLite
SQLiteæ¯ANSI-Cçæºä»£ç ãå¨ä½¿ç¨ä¹åå¿ é¡»è¦ç¼è¯ææºå¨ç ãè¿ç¯æç« æ¯ç¨äºåç§ç¼è¯SQLiteæ¹æ³çæåã
è¿ç¯æç« ä¸å å«ç¼è¯SQLiteçæ¯ä¸ªæ¥éª¤çåé¦ï¼é£æ ·å¯è½ä¼å°é¾å 为æ¯ç§å¼ååºæ¯é½ä¸åãæ以è¿ç¯æç« æè¿°åéè¿°äºç¼è¯Sqliteçååãå ¸åçç¼è¯å½ä»¤å·²ç»ä½ä¸ºä¾åæä¾äºï¼ä»¥ææåºç¨å¼åè è½å¤ä½¿ç¨è¿äºä¾åä½ä¸ºå®æä»ä»¬èªå·±å®å¶çç¼è¯è¿ç¨ççä¸ä¸ªæåãæ¢å¥è¯è¯´ï¼è¿ç¯æç« æä¾äºæ³æ³åè§è§£ï¼èä¸æ¯äº¤é¥åç解å³æ¹æ³ã
èåVSåç¬æºæ件
Sqliteæ¯ç±è¶ è¿ä¸ç¾ä¸ªcæºç æ件以åä¼å¤çç®å½ä¸çèæ¬æ建çãSqliteçå®ç°æ¯çº¯ç²¹çANSI-Cï¼ä½æ¯è®¸å¤Cè¯è¨æºä»£ç æ件æ¯ç±è¾ å©çCç¨åºçææè 转æ¢æ¥çï¼å¹¶ä¸AWKï¼SEDåTCLèæ¬ä¼èåå°å®æçsqliteåºä¸ã对Sqliteæ建éè¦çCç¨åºå转æ¢åå建Cè¯è¨æºç æ¯ä¸ä¸ªå¤æçè¿ç¨ã
为äºç®åè¿äºï¼sqliteä¹éè¿ä¸ä¸ªé¢æå çå并åçæºç æ件ï¼sqlite3.cãè¿ä¸ªå并æ件æ¯ä¸ä¸ªANSI-Cæºç å®ç°æ´ä¸ªSQLiteåºçå¯ä¸æ件ãå并åçæ件æ´å®¹æå¤çãææçä¸è¥¿é½å å«å¨è¿ä¸ä¸ªæ件éï¼æ以å¾å®¹æè¿å ¥ä¸ä¸ªæ´å¤§çCæè C++ç¨åºçæºç æ ãææç代ç çæå转æ¢æ¥éª¤é½å·²ç»å®ç°äºï¼å æ¤æ²¡æè¾ å©çCç¨åºéè¦å»é ç½®ååå¼ï¼ä¹æ²¡æèæ¬éè¦å»è¿è¡ã并ä¸ï¼å æ¤ææåé½å å«å¨ä¸ä¸ªç¿»è¯åå ï¼ç¼è¯å¨å¯ä»¥åæ´å¤é«çº§çä¼åä»èæå5%å°%çæ§è½ãå 为è¿äºåå ï¼èååçæºç æ件sqlite3.c对ææç¨åºæ¥è®²é½æ¯å¼å¾æ¨èçã
æ¨èææçåºç¨ç¨åºä½¿ç¨èåæ件ã
ç´æ¥ä»åç¬çæºç æ件ä¸æ建sqliteå½ç¶å¯ä»¥ï¼ä½æ¯å¹¶ä¸æ¨èã对ä¸äºç¹æ®çåºç¨ç¨åºï¼å¯è½éè¦ä¿®æ¹æ建ç¨åºå»å¤ç使ç¨é£äºä»ç½ç«ä¸ä¸è½½çé¢æ建çæºç æ件ä¸è½å®æçæ åµã对äºè¿äºæ åµï¼æ¨èæ建å使ç¨ä¸ä¸ªå®å¶è¿çå并æ件ãæ¢å¥è¯è¯´ï¼å³ä½¿ä¸ä¸ªå·¥ç¨éè¦ä»¥åç¬çæºç æ件æ建sqliteï¼ä»ç¶æ¨è使ç¨ä¸ä¸ªèååçæºç æ件ä½ä¸ºä¸ä¸ªä¸é´æ¥éª¤ã
ç¼è¯å½ä»¤è¡æ¥å£ï¼CLIï¼
æ建å½ä»¤è¡æ¥å£éè¦ä¸ä¸ªæºç æ件ï¼
sqlite3.c:Sqliteèåçæºç æ件
sqlite3.h:å¹é sqlite3.c以åå®ä¹sqliteçcè¯è¨æ¥å£ç头æ件
shell.c:å½ä»¤è¡æ¥å£ç¨åºæ¬èº«ãè¿ä¸ªcæºç æ件å å«ä¸ä¸ªmain()çä¾ç¨åæ¯è½®å¾ªç¯çç¨æ·è¾å ¥çæ示符并å°è¾å ¥ä¼ ç»sqliteæ°æ®åºå¼æç¨äºå¤çã
ææçä¸è¿°æºç çä¸ä¸ªæ件é½è¢«å å«å¨ä¸è½½é¡µé¢çamalgamation tarballä¸ã
为äºæ建CLIï¼ç®åçå°è¿ä¸ä¸ªæ件æ¾ç½®å¨ç¸åçç®å½ä¸ç¶åä¸èµ·ç¼è¯ä»ä»¬ãç¨MSVCï¼
cl shell.c sqlite3.c -Fesqlite3.exe
å¨unixç³»ç»ä¸ï¼æè å¨windowsä¸ç¨cygwinæè mingw+msysï¼å ¸åçå½ä»¤ä¼æäºåè¿æ ·ï¼
gcc shell.c sqlite3.c -lpthread -ldl
为äºSQLite线ç¨å®å ¨ï¼éè¦pthreadsåºãä½æ¯å 为CLIæ¯ä¸ä¸ªå线ç¨çï¼æ们å¯ä»¥æ示SQLiteæ建ä¸ä¸ªé线ç¨å®å ¨çåºå¹¶å æ¤æ¤ç»¿pthreadsåºï¼
gcc -DSQLITE_THREADSAFE=0 shell.c sqlite3.c -ldl
-ldlåºæ¯å¨æ¯æå¨æè£ è½½æ¶éè¦ï¼ä¾å¦sqlite3_load_extension() æ¥å£åload_extension()
SQL functionãå¦æè¿äºç¹æ§é½ä¸è¦æ±ï¼é£ä¹æ们ä¹å¯ä»¥ä½¿ç¨SQLITE_OMIT_LOAD_EXTENSIONç¼è¯æ¶é´é项忽ç¥ä»ä»¬ã
gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c
æ人å¯è½æ³è¦æä¾å ¶ä»çç¼è¯æ¶é´é项(compile-time options)ï¼ä¾å¦SQLITE_ENABLE_FTS3å»å ¨ææ¬æç´¢æè SQLITE_ENABLE_RTREEç¨äºR*æ æç´¢å¼ææ©å±ãèæ人å°æ£å¸¸æå®ä¸äºç¼è¯ä¼åå¼å ³ãï¼é¢ç¼è¯çCLIå¯ä»¥ä»éæ©sqliteç½ç«ä¸ä½¿ç¨â-Osâä¸è½½ä¸æ¥ï¼ææ æ°ç§å¯è½çåæ°å¨è¿éã
å ³é®ç¹å¨è¿éï¼æ建CLIéè¦ç¼è¯ä¸èµ·ä¸¤ä¸ªCè¯è¨æ件ãshell.cæ件å å«å ¥å£çå®ä¹åç¨æ·è¾å ¥çloopï¼èsqliteèåæ件sqlite3.cå å«å®æ´çsqliteåºçå®ç°ã
ç¼è¯TCLæ¥å£
sqliteçtclæ¥å£æ¯ä¸ä¸ªå°ç模å被添å å°ä¸è¬çèåæ件ä¸ãç»ææ¯ä¸ä¸ªæ°çèååçæºç æ件ï¼ç§°ä¹ä¸ºâtclsqlite3.câãè¿ä¸ªæºç æ件æ¯çæä¸ä¸ªå¯ä»¥ä½¿ç¨TCL
loadå½ä»¤å»å è½½å°ä¸ä¸ªæ åçtclshæè wishä¸ï¼æè éçsqliteæ建æåçæä¸ä¸ªåç¬å¯ä¸çtclshçå ±äº«åºæéè¦çãä¸ä¸ªtclçèåçå¯æ¬è¢«å å«å¨ä¸è½½é¡µçTEA
tarballä¸ä½ä¸ºä¸ä¸ªæ件ã
为äºçæä¸ä¸ªlinuxä¸çsqliteçTCL-loadableåº,ä¸é¢çå½ä»¤éè¦æ»¡è¶³ï¼
gcc -o libtclsqlite3.so -shared tclsqlite3.c -lpthread -ldl -ltcl
ä¸å¹¸çæ¯æ建Mac OS X å Windowsçå ±äº«åºå¹¶ä¸æ¯å¦æ¤ç®åã对äºè¿äºå¹³å°æ好使ç¨å å«å¨TEA tarballä¸çconfigureèæ¬åmakefile.
为äºçæä¸ä¸ªåç¬çtclshï¼å¯ä»¥ç¨äºsqliteéæé¾æ¥ï¼ä½¿ç¨å¦ä¸çç¼è¯å¨è°ç¨ï¼
gcc -DTCLSH=1 tclsqlite3.c -ltcl -lpthread -ldl -lz -lm
è¿éçæå·§æ¯-DTCLSH=1é项ãsqliteçTCLæ¥å£æ¨¡åå å«ä¸ä¸ªmainçè¿ç¨ï¼ç¨äºåå§åä¸ä¸ªTCL解éå¨å¹¶å¨ä»¥-DTCLSH=1ç¼è¯åè¿å ¥å°ä¸ä¸ªå½ä»¤è¡loopãä¸è¿°å½ä»¤å¯ä»¥å·¥ä½å¨LinuxåMac
OS X,è½ç¶ææ¶å¯è½éè¦ä¾èµäºå¹³å°è°æ´åºé项以åç¼è¯çTCLçåªä¸ä¸ªçæ¬ã
æ建èåæ件
ä¸è½½é¡µæä¾çsqliteèåæ件ççæ¬å¯¹å¤§å¤æ°ç¨æ·æ¥è¯´æ¯è¶³å¤çãç¶èï¼ä¸äºå·¥ç¨å¯è½æ³è¦æè éè¦æ建ä»ä»¬èªå·±çèåæ件ãä¸ä¸ªå¸¸è§çæ建ä¸ä¸ªå®å¶çèåæ件ççç±æ¯ä¸ºäºä½¿ç¨ç¹å®çcompile-time optionsæ¥å®å¶sqliteåºãåæ³sqliteèåæ件ä¸å å«äºè®¸å¤C代ç ç±è¾ å©ç¨åºåèæ¬çæã许å¤çç¼è¯æ¶é´é项影åè¿ä¸æå£ä»£ç èä¸å¿ é¡»å¨èåæ件ç»è£ åæä¾ç»ä»£ç çæå¨ãè¿ä¸ç³»åå¿ é¡»ä¼ ç»ä»£ç çæå¨çç¼è¯æ¶é´ç¸å ³çé项ä¼ä½¿å¾sqliteçåå¸çæ¬åä¸ç¸åï¼ä½æ¯å¨åè¿è¾¹æç« çæ¶åï¼ä»£ç çæå¨éè¦ç¥éçè¿ç»é项å æ¬ï¼
SQLITE_ENABLE_UPDATE_DELETE_LIMIT
SQLITE_OMIT_ALTERTABLE
SQLITE_OMIT_ANALYZE
SQLITE_OMIT_ATTACH
SQLITE_OMIT_AUTOINCREMENT
SQLITE_OMIT_CAST
SQLITE_OMIT_COMPOUND_SELECT
SQLITE_OMIT_EXPLAIN
SQLITE_OMIT_FOREIGN_KEY
SQLITE_OMIT_PRAGMA
SQLITE_OMIT_REINDEX
SQLITE_OMIT_SUBQUERY
SQLITE_OMIT_TEMPDB
SQLITE_OMIT_TRIGGER
SQLITE_OMIT_VACUUM
SQLITE_OMIT_VIEW
SQLITE_OMIT_VIRTUALTABLE
为äºæ建ä¸ä¸ªå®å¶çèåæ件ï¼å ä¸è½½åå§çç¬ç«æºç æ件å°ä¸ä¸ªunixæè ç±»unixå¼åå¹³å°ãç¡®å®è·åçåå§æºç æ件ä¸æ¯âé¢ç¼è¯è¿çæºæ件âãä»»ä½äººé½å¯ä»¥éè¿å°ä¸è½½é¡µæè ç´æ¥ä»configuration management system.è·åå®æ´çä¸å¥åå§æºç æ件ã
å设sqliteæºç æ 被åå¨ä¸ä¸ªå为âsqliteâçç®å½ä¸ã计åæ建ä¸ä¸ªå¹³è¡ç®å½ä¸çå为âbldâçèåæ件ãé¦å éè¿è¿è¡sqliteæºç æ ç§çconfigureèæ¬è¿è¡æè éè¿å¶ä½ä¸ä»½æºç æ 顶å±ççmakfile模æ¿çä¸ä»½ï¼æ¥æ建ä¸ä¸ªåéçmakefile.ç¶åæå¨ç¼è¾è¿ä¸ªMakfileå»å å«éè¦çç¼è¯æ¶é´ç¸å ³çé项ãæç»è¿è¡ï¼
make sqlite3.c
å¨windowsä¸ä½¿ç¨MSVC:
nmake /f Makefile.msc sqlite3.c
sqlite3.cçmake
targetä¼èªå¨æé ä¸è¬çâsqlite3.câå并çæºç æ件ï¼ä»¥åå®ç头æ件âsqlite3.hâï¼åå å«TCLæ¥å£çèåæºç æ件âtclsqlite3.câãä¹åï¼éè¦çæ件å¯ä»¥è¢«æ·è´å°æ件ç®å½ä¸ç¶åæ ¹æ®ä¸è¿°å¾åçè¿ç¨ç¼è¯ã
æ建ä¸ä¸ªwindowsçå¨æé¾æ¥åºDLL
为äºå¨windowsæ建ä¸ä¸ªsqliteçdll使ç¨ï¼é¦å è·å对åºçèåè¿çæºç æ件ï¼sqlit3.cåsqlite.hãè¿äºå¯ä»¥ä»SQLite websiteä¸ä¸è½½æè åä¸è¿°åç¥çä¸æ ·å»å®å¶çæã
使ç¨å·¥ä½ç®å½ä¸çæºç æ件ï¼ä¸ä¸ªdllå¯ä»¥å¨msvcä¸ä½¿ç¨å¦ä¸å½ä»¤çæï¼
cl sqlite3.c -link -dll -out:sqlite3.dll
ä¸è¿°å½ä»¤éè¦è¿è¡å¨msvcçMSVC Native Tools Command
Prompt.å¦ä½ä½ å·²ç»å¨æºå¨ä¸å®è£ äºmsvcï¼ä½ å¯è½æå¤ä¸ªçæ¬çè¿ç§å½ä»¤æ示符ï¼é对äºxåxçèªå¸¦æ建çï¼æè 交åç¼è¯å°ARMçãä¾èµè¦æ±çDLLå»ä½¿ç¨å¯¹åºåéçå½ä»¤æç¤ºç¬¦å·¥å ·ã
å¦æ使ç¨MinGWç¼è¯å¨ï¼å½ä»¤æ¯è¿æ ·çï¼
gcc -shared sqlite3.c -o sqlite3.dll
注æMinGWåªçæä½çdllãå¦æä¸ä¸ªåå¼çMinGWå·¥ç¨å¯ä»¥ç¨æ¥çæä½çdllãå¯ä»¥æ¨æå ¶å½ä»¤è¡è¯æ³æ¯ç±»ä¼¼çãéè¦æ³¨æçæ¯æè¿çMSVCççæ¬çæçDLLså¯è½ä¸è½å·¥ä½å°WinXPæè æ´æ©çæ¬çwindowsä¸ãå æ¤ä¸ºäºæ大é度çå ¼å®¹ä½ ççæçdllï¼æ¨èMinGWãä¸ä¸ªå¥½çç»éªæ³åæ¯ä½¿ç¨MinGWå»çæä½çdllsï¼ä½¿ç¨msvcå»çæä½çdllsã
Python程序开发系列利用Peewee库创建SQLite数据库、建表并写入数据(案例+源码)
本文将使用Python编程语言中的Peewee库来创建一个SQLite数据库、建立表格并写入数据。以下是详细步骤:
首先,理解Peewee库,这是一款轻量级的ORM(对象关系映射)库,简化了与关系型数据库的交互过程。Peewee支持多种数据库,包括SQLite、MySQL、PostgreSQL等。它的核心功能包括简化数据库操作,使其在Python中使用更加便捷和高效。
接着,我们关注SQLite数据库。SQLite是一种嵌入式的轻量级数据库管理系统,无需单独服务器进程,其数据文件存储于本地,适用于小型应用和移动应用。其优点包括占用资源少、支持多种操作系统等。以下关键特性展示了SQLite的优势:
接下来,我们实现数据库的创建、表设计、表创建和数据插入:
第一步,利用`SqliteDatabase`类在项目目录中创建SQLite数据库文件。
第二步,设计一个名为`Person`的表,包含`name`(字符类型)和`age`(整型)两个字段。
第三步,通过执行`create_table`函数建立上述设计的`Person`表。
第四步,将列表中的元素依次写入到`Person`表的`name`字段。
最后,小结:本文通过Peewee库成功创建了SQLite数据库,设计和构建了`Person`表,并将数据写入了表中。本文旨在通过简单的实例,展示如何使用Peewee和SQLite进行基本的数据库操作。如果你对数据算法、Python编程、数据分析、机器学习、深度学习等领域感兴趣,欢迎关注公众号“数据杂坛”,获取更多源码和数据集。如需深入学习和实践,推荐查看原文链接。希望本文能为你的编程之旅提供帮助。
node-pre-gyp以及node-gyp的源码简单解析(以安装sqlite3为例)
在Node.js开发中,确保模块跨平台性至关重要,尤其当涉及到使用C/C++原生代码的模块,如SQLite3。让我们通过一个实例来理解安装这种原生模块的过程,以SQLite3为例。项目初始化
首先,创建一个基础的Node.js项目,我们开始安装SQLite3。安装SQLite3
执行安装命令后,你会看到命令行输出关键信息:node-pre-gyp的引入
在安装过程中,你会遇到node-pre-gyp,这个工具与node-gyp和gyp紧密相关。gyp是一个用于生成项目文件的构建工具,它为Chromium项目生成IDE项目文件,如Visual Studio和Xcode。而node-gyp则是专为Node.js Addons(原生模块)编译设计的,它允许在本地编译C/C++代码。node-pre-gyp的作用
为了简化每次安装时的平台编译工作,node-pre-gyp允许预先为常见平台生成二进制文件。当项目尝试安装时,它会优先查找预编译的二进制包,如果找不到,才会转而依赖node-gyp进行源码编译。安装流程
当我们使用`npm install sqlite3`时,实际上执行了`node-pre-gyp install --fallback-to-build`。安装流程包括:检查node-pre-gyp是否已安装,如果没有,npm会自动安装。
node-pre-gyp查找预编译二进制包,如果存在,则直接使用。
如果没有找到,使用node-gyp进行源码编译。
深入了解SQLite3安装
查看sqlite3的package.json,`scripts`部分包含了`node-pre-gyp install`命令。npm会根据这个脚本执行安装过程。源码编译与node-gyp
node-gyp的`build.js`负责执行编译任务,通过`gyp`工具生成特定平台的项目文件,如Windows的vcxproj,然后使用MSBuild编译。node-pre-gyp与node-gyp的交互
node-pre-gyp的`do_build`模块调用node-gyp build,执行具体的编译操作,确保模块能在目标平台上正确工作。linux中sqlite数据库的简单使用
一、数据库的安装
1. 网络安装:配置好网络源后,使用命令 sudo apt-get install sqlite3 安装。
2. 使用deb包安装:使用命令 sudo dpkg -i *.deb 安装三个deb包。
3. 使用源码包安装:首先解压文件 tar xzf sqlite-autoconf-.tar.gz,然后执行 ./configure,接着执行 make && make install。
二、SQLite命令
1. 创建数据库:执行命令 sqlite3 company.db。
2. 帮助:使用命令 .help。
3. 退出:使用命令 .quit。
4. 显示当前数据库文件:使用命令 .database。
5. 显示所有表名:使用命令 .tables。
6. 查看表结构:使用命令 .schema。
7. 控制显示格式:使用命令 .mode column 和 .header on。
三、SQLite数据类型
数据类型包括:null、integer、real、text、blob。
表结构包括:行(记录)、列(字段)、值(字段值)。
四、SQL命令
1. 创建表(主键):使用命令 create table table_name( column1 datatype primary key, column2 datatype, ... columnn datatype, );。
2. 删除表:使用命令 drop table table_name;。
3. 插入数据:指定列插入使用命令 insert into table_name (column1, column2, ...columnn) values (value1, value2, ...valuen);,所有列插入使用命令 insert into table_name values (value1,value2,value3,...valuen);。
4. 查询语句:查询所有使用命令 select * from table_name;,查询指定列使用命令 select column1, column2, ...columnn from table_name;,条件查找使用命令 select * from table_name where ...;。
5. 删除记录:使用命令 delete from table_name where condition;。
6. 修改记录:使用命令 update table_name set column1 = value1, column2 = value2,..., columnn = valuen where condition;。
五、Linux编程接口
1. 打开数据库:使用函数 sqlite3_open(char *path, sqlite3 **db);。
2. 关闭数据库:使用函数 sqlite3_close(sqlite3 *db);。
3. 执行SQL语句:使用函数 sqlite3_exec( sqlite3 *db, const char *sql, int (*callback)(void*,int,char**,char**), void *arg, char **errmsg );。
4. 不使用回调函数执行SQL语句:使用函数 sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int*nrow, int *ncolumn, char **errmsg);。
学习嵌入式物联网需要全面的知识,选择正确的学习路径至关重要。获取最新、全面的学习资料,可点击链接找小助理免费领取。