SQLite 进阶:扩展功能与最佳实践

在前两篇文章中,我们探讨了 SQLite 的基础知识和高级功能。本篇将进一步探讨 SQLite 的扩展功能,包括加密、与其他工具的集成、多线程使用、性能优化,以及如何实现跨平台兼容性。


数据加密

SQLite 本身不直接支持加密,但可以通过 SQLite 的扩展(如 SQLite Encryption Extension,简称 SEE)或第三方库(如 SQLCipher)实现加密。

使用 SQLCipher 加密数据库

以下是使用 SQLCipher 创建和访问加密数据库的示例:

# 安装 SQLCipher
sudo apt install sqlcipher# 创建加密数据库
sqlcipher my_secure_database.db# 设置加密密钥
PRAGMA key = 'your_secret_key';# 创建表并插入数据
CREATE TABLE secure_data (id INTEGER PRIMARY KEY, info TEXT);
INSERT INTO secure_data (info) VALUES ('Sensitive Information');# 查询数据
SELECT * FROM secure_data;

使用 SQLCipher,您可以确保数据在磁盘上的存储是加密的。


与其他工具集成

SQLite 能够与多种编程语言和工具无缝集成,以下是几个常见的示例:

与 Pandas 集成

在 Python 中,Pandas 可以直接读取和写入 SQLite 数据库:

import sqlite3
import pandas as pd# 连接到数据库
conn = sqlite3.connect('example.db')# 创建示例数据并写入数据库
data = {'name': ['Alice', 'Bob'], 'age': [25, 30]}
df = pd.DataFrame(data)
df.to_sql('people', conn, if_exists='replace', index=False)# 从数据库读取数据
df_from_db = pd.read_sql('SELECT * FROM people', conn)
print(df_from_db)# 关闭连接
conn.close()
与 Flask 集成

以下是一个使用 Flask 和 SQLite 构建简单 Web 应用的示例:

from flask import Flask, g, request, jsonify
import sqlite3app = Flask(__name__)
DATABASE = 'example.db'# 获取数据库连接
def get_db():db = getattr(g, '_database', None)if db is None:db = g._database = sqlite3.connect(DATABASE)return db# 关闭数据库连接
@app.teardown_appcontext
def close_connection(exception):db = getattr(g, '_database', None)if db is not None:db.close()# 示例路由
@app.route('/add_user', methods=['POST'])
def add_user():data = request.get_json()name = data['name']age = data['age']db = get_db()db.execute('INSERT INTO users (name, age) VALUES (?, ?)', (name, age))db.commit()return jsonify({'status': 'User added'})if __name__ == '__main__':app.run(debug=True)

多线程使用

SQLite 支持多线程访问,但需要正确配置。可以通过 PRAGMA 指令设置多线程模式:

  • 单线程模式:禁止多线程访问(默认)。
  • 多线程模式:允许多个线程读写数据库,但同一时间只有一个线程可写。
  • 串行模式:线程安全,适合多线程环境。
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;

性能优化
使用批量插入

单条插入语句会增加 I/O 操作时间,使用批量插入可以显著提高效率:

import sqlite3# 批量插入数据
conn = sqlite3.connect('example.db')
cur = conn.cursor()
data = [(1, 'Alice'), (2, 'Bob')]
cur.executemany('INSERT INTO users (id, name) VALUES (?, ?)', data)
conn.commit()
conn.close()
使用缓存

SQLite 提供了内置的缓存功能,可以通过以下方式提高性能:

PRAGMA cache_size = 10000;  -- 设置缓存大小(单位:页面数)
禁用同步(仅限对数据一致性要求较低的场景)
PRAGMA synchronous = OFF;

跨平台兼容性

SQLite 的数据库文件在所有支持的系统上是兼容的。但在不同的操作系统之间使用时,请注意以下几点:

  1. 文件路径格式:在 Windows 和 Unix 系统之间切换时,应使用正确的路径分隔符。
  2. 字符集:确保所有系统都使用 UTF-8 编码。
  3. 版本一致性:避免在旧版本 SQLite 上打开由新版本创建的数据库。

通过以下命令检查 SQLite 的版本:

sqlite3 --version

结论

通过扩展功能,SQLite 能够支持加密、高效的数据处理和多种语言及工具的集成,进一步增强其实用性和安全性。在跨平台项目中,SQLite 的灵活性和易用性使其成为一种强大的嵌入式数据库解决方案。

在下一篇文章中,我们将探索 SQLite 的常见问题和调试技巧,包括如何解决数据库锁定、优化查询,以及使用工具分析性能。敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postgresql 命令还原数据库

因为PgAdmin打不开,但是数据库已经安装成功了,这里借助Pg命令来还原数据库 C:\Program Files\PostgreSQL\15\bin\psql.exe #链接数据库 psql -U postgres -p 5432#创建数据库 CREATE DATABASE "数据库名称"WITHOWNER postgresENCODING UTF8…

JavaScript 基础2

js的运算符 算数运算符 相加求和&#xff0c;如果用在字符串则是拼接 -相减求差 *相乘求积 /相除求商 %模除求余 具体用法如下 let num 154 let num2 15 document.write(numnum2) document.write(<br>) document.write(num-num2) document.write(<br>) do…

《Xsens动捕与人形机器人训练》讲座将于1月9日下午2:30在线上召开

《Xsens动捕与人形机器人训练》讲座将于1月9日下午2:30在线上召开&#xff0c;本次讲座中来自Xsens的人形机器人与动捕技术专家Jeffrey Muller与Dennis Kloppenburg不仅将就Xsens动作捕捉系统与人形机器人行为训练中的实际应用进行详细讲解&#xff0c;同时还会对目前大家所关注…

ArcGIS Server 10.2授权文件过期处理

新的一年&#xff0c;arcgis server授权过期了&#xff0c;服务发不不了。查看ecp授权文件&#xff0c;原来的授权日期就到2024.12.31日。好吧&#xff0c;这里直接给出处理方法。 ArcGIS 10.2安装时&#xff0c;有的破解文件中会有含一个这样的注册程序&#xff0c;没有的话&…

Fabric部署-docker安装

一&#xff1a;安装docker 1.先卸载旧docker apt-get remove docker docker-engine docker.io containerd runc PS&#xff1a;新开的虚拟机输入命令后是这样的。 2.更新软件包 在终端中执行以下命令来更新Ubuntu软件包列表和已安装软件的版本: sudo apt update sudo apt …

Scrum中敏捷项目经理(Scrum Master)扮演什么角色?

敏捷开发模式已经逐渐被主流的软件研发团队所接受&#xff0c;其中Scrum是最具代表性的敏捷方法之一。Scrum框架中有三个核心角色&#xff1a;Product Owner&#xff08;PO&#xff09;、Scrum Master&#xff08;SM&#xff09;和Development Team&#xff08;DT&#xff09;。…

计算机毕设-基于springboot的教务管理系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

ROS导航使用贝塞尔曲线对全局路径进行平滑处理

文章目录 前言一、贝塞尔曲线的使用二、全局路经修改三、结果对比 前言 ROS原生的全局路径规划GlobalPlanner包含A*和Dijkstra&#xff0c;两者原理基本相同&#xff0c;能够规划出从起点到终点的路径&#xff0c;但是由于栅格地图存在锯齿形&#xff0c;得到的全局路径也会出…

GIT 企业级开发学习 1

本节主要命令&#xff1a; git init ls 不能列出 .git ls -a 列出 .git 1. 初始化 Git 仓库 git init • 初始化一个新的 Git 仓库&#xff0c;在当前目录下生成一个 .git 隐藏文件夹&#xff0c;用于存储版本控制信息。 2. 查看隐藏文件 ls -a • 使用 ls -a 显示隐藏文件…

【从零开始入门unity游戏开发之——unity篇05】unity6基础入门——运行游戏按钮、Game游戏窗口和Project项目窗口介绍

文章目录 运行游戏按钮、Game游戏窗口和Project项目窗口一、运行游戏按钮二、Game游戏窗口1、右上角设置1.1 如果没有相机渲染则发出警告1.2 在”编程模式”下清除每一帧1.3 窗口最大化 2、上方工具&#xff08;1&#xff09;切换手机模拟器&#xff08;2&#xff09;切换不同显…

Java 定时任务发送邮件

163邮箱为例 1、添加依赖 <!-- mail-starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency> 2、编写配置&#xff0c;smtp默认端口25&#xff0c…

【深度学习进阶】基于CNN的10种物体识别项目

介绍 基于卷积神经网络&#xff08;CNN&#xff09;的猫狗图片分类项目是机器学习领域中的一种常见任务&#xff0c;它涉及图像处理和深度学习技术。以下是该项目的技术点和流程介绍&#xff1a; 技术点 卷积神经网络 (CNN): CNN 是一种专门用于处理具有类似网格结构的数据的…

开发培训-慧集通(iPaaS)集成平台脚本开发Groovy基础培训视频

‌Groovy‌是一种基于Java虚拟机&#xff08;JVM&#xff09;的敏捷开发语言&#xff0c;结合了Python、Ruby和Smalltalk的许多强大特性。它旨在提高开发者的生产力&#xff0c;通过简洁、熟悉且易于学习的语法&#xff0c;Groovy能够与Java代码无缝集成&#xff0c;并提供强大…

Flutter中添加全局防护水印的实现

随着版权意识的加强&#xff0c;越来越多的应用开始在应用内部增加各种各样的水印信息&#xff0c;防止核心信息泄露&#xff0c;便于朔源。 效果如下&#xff1a; 在Flutter中增加全局水印的方式&#xff0c;目前有两种实现。 方案一&#xff0c;在native层添加一个遮罩层&a…

华为ensp-BGP路由过滤

学习新思想&#xff0c;争做新青年&#xff0c;今天学习的是BGP路由过滤 实验目的&#xff1a; 掌握利用BGP路由属性AS_Path进行路由过滤的方法 掌握利用BGP路由属性Community进行路由过滤的方法 掌握利用BGP路由属性Next_Hop进行路由过滤的方法 实验内容&#xff1a; 本实…

鸿蒙应用开发搬砖经验之—使用DevTools工具调试前端页面

环境说明&#xff1a; 系统环境&#xff1a;Mac mini M2 14.5 (23F79) 开发IDE&#xff1a;DevEco Studio 5.0.1 Release 配置步骤&#xff1a; 按着官方的指引来慢慢一步一步来&#xff0c;但前提是要配置好SDK的路径&#xff08;没有配置的话&#xff0c;可能先看下面的配…

Linux(centos)安装 MySQL 8 数据库(图文详细教程)

前言 前几天写了个window系统下安装Mysql的博客&#xff0c;收到很多小伙伴私信需要Linux下安装Mysql的教程&#xff0c;今天这边和大家分享一下&#xff0c;话不多说&#xff0c;看教程。 一、删除以前安装的MySQL服务 一般安装程序第一步都需要清除之前的安装痕迹&#xff…

【HarmonyOS应用开发——ArkTS语言】欢迎界面(启动加载页)的实现【合集】

目录 &#x1f60b;环境配置&#xff1a;华为HarmonyOS开发者 &#x1f4fa;演示效果&#xff1a; &#x1f4d6;实验步骤及方法&#xff1a; 一、在media文件夹中添加想要使用的图片素材​ 二、在entry/src/main/ets/page目录下创建Welcome.ets文件 1. 整体结构与组件声…

查看打开的端口

对一个大范围的网络或活跃的主机进行渗透测试&#xff0c;需要了解这些主机上所打开的端口号。 使用Nmap工具扫描主机上开放的端口号&#xff1a; 输出的信息显示了主机www.yiai.xyz上开放的所有端口 指定扫描端口范围 如果目标主机上打开的端口较多时&#xff0c;用户查看起…

运动控制探针功能详细介绍(CODESYS+SV63N伺服)

汇川AM400PLC和禾川X3E伺服EtherCAT通信 汇川AM400PLC和禾川X3E伺服EtherCAT通信_汇川ethercat通信-CSDN博客文章浏览阅读1.2k次。本文详细介绍了如何使用汇川AM400PLC通过EtherCAT总线与禾川X3E伺服进行通信。包括XML硬件描述文件的下载与安装,EtherCAT总线的启用,从站添加…