python使用pysqlcipher3对sqlite数据库进行加密

python对很多项目都需要对sqlite数据库的数据进行加密,最流行的加密方式是使用pysqlcipher3,当前使用的python版本为3.7,本博文是直接使用pysqlcipher3在项目上的应用,使用的是已编译好的pysqlcipher3包,如果你需要pysqlcipher3,在后面有下载地址,下载后,可以直接使用,不需要再进行编译

界面代码如下

一、相关代码
1、连接sqlite数据库文件配置
DB_TYPE_MYSQL = 'MYSQL'
DB_TYPE_SQLITE = 'SQLITE'DB_TYPE = DB_TYPE_SQLITE  # 当前数据类型# SQLITE_URL = 'sqlite:///D:/dd/aippw.db3'  #sqlite连接地址
# SQLITE_URL = 'sqlite+pysqlcipher://:123123@/D:/dd/mydb.db3'  #sqlite连接地址,文件生成在d:\dd\目录
SQLITE_URL = 'sqlite+pysqlcipher://:123123@/mydb.db3'  #sqlite连接地址,文件生成在当前目录
2、连接数据库session
class SqlHelper:engine: Engine = Nonesession: Session = Nonedef __init__(self):Session = sessionManager.get_session(db_type=Constant.DB_TYPE)self.session = Session()self.engine = sessionManager.get_engine(db_type=Constant.DB_TYPE)def add(self, obj):self.session.add(obj)self.session.commit()def delete(self, obj):self.session.delete(obj)self.session.commit()def update(self, obj):self.session.merge(obj)self.session.commit()def upsert(self, model):self._upsert(model)self.session.commit()def query(self, model):return self.session.query(model)
3、界面代码
class UserPage(object):def __init__(self):self.root = tkinter.Tk()self.root.title("用户管理")Utils.set_screen(self.root, 450, 200)self.page = tkinter.Frame(self.root, width=850, height=650)self.page.pack(side='top')self.user = User()self.user.userId = tkinter.StringVar()self.user.username = tkinter.StringVar()self.user.phone = tkinter.StringVar()self.msg = tkinter.StringVar()self.userName_find = tkinter.StringVar()self.userName_find.set('请输入用户名称')tkinter.Label(self.page, text='用户名称:', font=('Terminal', 12)).grid(row=1, column=1)tkinter.Entry(self.page, textvariable=self.user.username, width=20).grid(row=1, column=2, columnspan=2)tkinter.Label(self.page, text='用户电话:', font=('Terminal', 12)).grid(row=2, column=1, pady=5)tkinter.Entry(self.page, textvariable=self.user.phone, width=20).grid(row=2, column=2, columnspan=2)tkinter.Button(self.page, text='保存', font=('Terminal', 12), command=self.save).grid(row=3, column=2,)tkinter.Entry(self.page, textvariable=self.userName_find, width=20).grid(row=5, column=1, columnspan=4,pady=30)tkinter.Button(self.page, text='查询', font=('Terminal', 12), command=self.get_User).grid(row=5, column=4,columnspan=1)tkinter.Label(self.page, textvariable=self.msg, font=('Terminal', 12)).grid(row=6, column=1)self.root.mainloop()# 查询基础配置def get_User(self):session = SqlHelper().sessionresults = session.query(User).where(User.username==self.userName_find.get()).all()string = ''for row in results:string = '   '+ '用户ID:' + str(row.userId) + ' 用户名称:' + row.username + ' 电话:' + row.phonemessagebox.showinfo('提示信息', string)session.close()def save(self):sql_helper = SqlHelper()saveUser = User()saveUser.username = self.user.username.get();saveUser.phone = self.user.phone.get()sql_helper.update(saveUser)messagebox.showinfo('提示信息','保存成功')
4、main方法
if __name__ == '__main__':print('sqlalchemy版本:', sqlalchemy.__version__)Utils.init_sys_userUserPage()print_hi('系统启动完成')
二、测试
1、运行main

2、输入数据

这个时候,会在工程目录生,mydb.db3的sqlite文件,此文件已加密,密码为123123,后面会用

3、查询,在查询框,输入 张三,正确反回数据

三、用工具查看mydb.db3数据库文件

1、安装DB.Browser.for.SQLite-3.12.2-win64.msi这个软件(最后下载地址里面有),安装后桌面上有 DB Browser (SQLCipher) 这个图标,双击打开

2、打开数据库

里面有,我们刚刚创建的表,以及里面插入了数据

四:下载

链接:https://pan.baidu.com/s/1v0bwhFiu4J8kwr5ThafKZw?pwd=5xdi 
提取码:5xdi

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

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

相关文章

【pyspider】爬取ajax请求数据(post),如何处理python2字典的unicode编码字段?

情景:传统的爬虫只需要设置fetch_typejs即可,因为可以获取到整个页面。但是现在ajax应用越来越广泛,所以有的网页不能用此种爬虫类型来获取页面的数据,只能用slef.crawl()来发起http请求来抓取数据。 直接上例子: 可以…

动作捕捉系统通过SDK与LabVIEW通信

运动分析、VR、机器人等应用中常使用LabVIEW对动作捕捉数据进行实时解算。NOKOV度量动作捕捉系统支持通过SDK与LabVIEW进行通信,将动作数据传入LabVIEW。 一、软件设置 1、形影软件设置 1、将模式切换到后处理模式 2、加载一个刚体数据 3、打开软件设置 4、选择网…

学习笔记:利用CANOE Panel和CAPL脚本模拟主节点发送LIN通信指令

前一篇文章已经对CANOE如何模拟主节点和从节点进行LIN通信做了简单的记录,修改主节点发送的指令需要修改LIN ISC模块里的Frames帧对应的signal。这样改起来比较麻烦且不直观,幸好CANOE提供了Panel designer这样的工具,我们可以利用它设计自己…

数组的存储结构、特殊矩阵和稀疏矩阵的压缩存储

数组的存储结构、特殊矩阵和稀疏矩阵的压缩存储 1.数组的存储结构、特殊矩阵、稀疏矩阵的压缩存储1.1 数组的存储结构1.1.1 一维数组的存储结构关系式1.1.2 多维数组的存储结构关系式 1.2 特殊矩阵的压缩存储1.2.1 对称矩阵1.2.2 下三角矩阵1.2.3 上三角矩阵1.2.4 三对角矩阵 1…

Window10安装Docker

文章目录 Window10安装Docker前提条件Hyper -VWSL 2.0 安装包下载执行安装包更新 Window10安装Docker 前提条件 Hyper -V 如何启用 WSL 2.0 安装包下载 官网地址 下载后: 执行安装包 wsl --update等得有点久 重新打开 拉取一个helloworld镜像 说明已经…

大数据学习之一文学会Spark【Spark知识点总结】

文章目录 什么是SparkSpark的特点Spark vs HadoopSparkHadoopSpark集群安装部署Spark集群安装部署StandaloneON YARN Spark的工作原理什么是RDDRDD的特点Spark架构相关进程Spark架构原理 Spark实战:单词统计Scala代码开发java代码开发任务提交 Transformation与Acti…

vscode中 vue3+ts 项目的提示失效,volar插件失效问题解决方案

文章目录 前情提要bug回顾解决方案最后 前情提要 说起来很耻辱,从mac环境换到window环境,vscode的配置都是云端更新过来的,应该是一切正常才对,奇怪的是我的项目环境出现问题了,关于组件的ts和追踪都没有效果&#xff…

【JMeter】定时器分类以及场景介绍

1. 定时器分类 固定定时器 作用:请求之间设置等待时间应用场景:查询商品列表后,去查看列表商品详情页。针对商品列表数据量比较大的,响应时间会比较长,就需要设置等待时间然后去查看商详 2.定时器的作用域&#xff1…

【终端目标检测03】nanodet训练自己的数据集、NCNN部署到Android

nanodet训练自己的数据集、NCNN部署到Android 一、介绍二、训练自己的数据集1. 运行环境2. 数据集3. 配置文件4. 训练5. 训练可视化6. 测试 三、部署到android1. 使用官方权重文件部署1.1 下载权重文件1.2 使用Android Studio部署apk 2. 部署自己的模型【暂时存在问题】2.1 生成…

SpringBoot 整合RabbitMQ 之延迟队列实验

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Sprin…

01-基于IDEA,Spring官网,阿里云官网,手动四种方式创建SpringBoot工程

快速上手SpringBoot SpringBoot技术由Pivotal团队研发制作,功能的话简单概括就是加速Spring程序初始搭建过程和Spring程序的开发过程的开发 最基本的Spring程序至少有一个配置文件或配置类用来描述Spring的配置信息现在企业级开发使用Spring大部分情况下是做web开…

计算机毕业设计java+springboot+vue的旅游攻略平台

项目介绍 本系统结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用JAVA语言,结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。员工管理系统主要包括个人中心、用户管理、攻略管理、审核信息管理、积分…