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.mzph.cn/news/135801.shtml

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

相关文章

使用Python调用API接口获取淘宝商品数据

一、引言 随着互联网的发展,电子商务已经成为了我们生活中不可或缺的一部分。淘宝作为中国最大的电子商务平台,其商品种类繁多,价格透明,购物方便,深受消费者的喜爱。然而,淘宝的商品数据量庞大&#xff0…

基于TI 与ADIDSP音频项目实战

基于空时域的声反馈抑制系统 项目描述软件环境:MATLAB、CCS开发工具:TMS320C6748DSP、TLV320A1C23B音频编解码芯片、功放、扬声器、 麦克风项目简述: 本项目研制一种具有声反馈抑制功能的麦克风阵列产品,应用于教室及中小型会议…

Java定时任务实现

Java定时任务实现 Java 定时任务 JAVA实现定时任务的几种方式 Java实现定时任务的方法总结

爱剪辑如何将视频旋转90度,详细操作流程

爱剪辑是一款电脑端常用的视频剪辑类软件,基本上囊括了视频剪辑所需的所有功能,此处主要介绍,爱剪辑是如何对视频进行旋转操作的,水平旋转或者垂直旋转爱剪辑都是可以操作的,整体操作的详细过程将在下方为大家讲解。 …

使用TS进行Vue-Router的Meta类型扩展

文章目录 1、前言2、解决 1、前言 使用Vue-Router时,会将一些字段信息附加到路由的Meta对象里面,比如图标icon,标题,权限等,如下: {path: /billboard/board/:boardId,name: billboardBoard,props: true,c…

js异步解决方案的发展历程

JavaScript是一种广泛使用的编程语言,用于开发Web应用程序。在Web开发中,异步编程是一种重要的技术,它允许在执行长时间运行的操作时不阻塞用户界面。随着JavaScript的发展,异步编程解决方案也在不断演进。本文将探讨JavaScript异…

python实现FINS协议的TCP服务端(篇一)

python实现FINS协议的TCP服务端是一件稍微麻烦点的事情。它不像modbusTCP那样,可以使用现成的pymodbus模块去实现。但是,我们可以根据协议帧进行组包,自己去实现帧的格式,而这一切可以基于socket模块。本文为第一篇。 一、了解FI…

SoC和微控制器(MCU)

目录 SoCSTM32F407IGT6 MCUSTM32 SoC SoC是一种集成电路,将多个功能模块集成在一个芯片上,包括处理器、内存、外设接口、通信接口等。SoC通常用于嵌入式系统、移动设备和物联网等领域,提供了丰富的功能和性能。 STM32F407IGT6 STM32F407IG…

Jquery 老项目引入vue,elementui

背景: juery是一个广泛使用的JavaScript库,用于简化DOM操作、事件处理、动画效果等常见任务。 Vue是一个现代化的JavaScript框架,专注于构建可复用的组件和实现响应式数据绑定。在开发jQuery项目时,我们常常需要在JavaScript代码…

MTK_ISP模块调试总结

目录 一、多帧丢帧确认 二、4G平台高ISO黑白噪去除 三、PD补偿确认 四、5G平台CA-LTM修改 五、四角偏暗case 六、ISO档位不匹配 七、5G平台多帧参数不生效 八、验证ISP通道参数生效方法

java实现wav的重采样

在处理一些用户上传的音频的时候,往往根据用户的设备不通,文件格式难以统一,尤其是涉及到算法模型相关的,更是令人头疼,这里提供两种思路解决这个问题。 不借助三方库 这种采用的是javax.sound.sampled下的包来实现&a…

H5横屏适配方案

横屏模式一般使用场景比较少&#xff0c;特殊情况除外&#xff0c;一般用于游戏、操作性比较大的网页会采用横屏 整体代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" conte…

事务码增删查改表数据

常用事务码 SE11 SE14 SE16 SE16N SM30 SE11:查看数据库表/修改表中字段数量_类型/查看表中数据/设置表为可维护或不可维护 SE14:查看数据库表的创建日期创建用户名/查看表中字段/删除表中全部数据(只能全部删) SE16:查看数据库表/对可维护数据库表进行数据维护/SE16通过调试…

python语法杂记

python基础&#xff1a; 1)常用的数据结构(集合) 数据双向链表queue:队列和栈 排序字典:orderrdDict 计数器:counter 2)模块 什么是模块&#xff1f; 什么是包及如何使用第三方包&#xff1f; 模块使用总结&#xff1f; 3)函数 自定义函数一般格式&#xff1b; 函数参数中…

牛客网面试必刷TOP101--C++详细题解

题目 NC65 斐波那契数列NC103 反转字符串NC141 判断是否为回文字符串NC151 最大公约数NC4 判断链表中是否有环NC7 买卖股票的最好时机(一) NC65 斐波那契数列 题目描述&#xff1a; 分析&#xff1a; 使用递归求解&#xff0c;当输入参数等于1、2时返回整数1 class Solution …

npm包管理相关命令

前置条件&#xff0c;准备npm账号&#xff0c;并登录&#xff0c;npm login 或者 npm adduser &#xff08;这一行同样需要输入账号密码登录&#xff0c;之后就不用登录了&#xff09; 验证是否登录&#xff1a;npm whoami 还可以查看用户简介&#xff1a;npm profile get …

11-2 mybatis入门细节

mybatis Mybatis 单表CURD细节 ${} 与#{} 区别(面试题) ${} 拼接sql 造成sql注入 #{} 使用?占位 如果作为值, 推荐使用#{} ${} 实现一些动态排序,使用 #{column} select * from tb_userinfo order by ? desc column: id 赋值 sql: select * from tb_userinfo order by id …

“我和云栖有个约会”有奖征文获奖名单已公布

活动地址&#xff1a;https://activity.csdn.net/creatActivity?id10593 参与奖获得奖名单 用户昵称博文链接秋说【约会云栖】从初中至大学&#xff0c;我见证了科技变革的历程。-CSDN博客Freedom35682019年云栖大会&#xff0c;我的技术元年-CSDN博客码农研究僧云栖大会&am…

第70讲:MySQL数据库全局锁的核心概念

文章目录 1.全局锁的概念2.使用全局锁的语法结构3.全局锁的基本使用 1.全局锁的概念 全局锁是对整个数据库实例添加一个锁&#xff0c;全局锁是面向整个数据库实例的&#xff0c;而不是单个数据库&#xff0c;添加锁之后这个实例就会处于只读状态&#xff0c;此时所有的数据库…

Selenium alert 弹窗处理!

页面弹窗有 3 种类型&#xff1a; alert&#xff08;警告信息&#xff09;confirm&#xff08;确认信息&#xff09;prompt&#xff08;提示输入&#xff09; 对于页面出现的 alert 弹窗&#xff0c;Selenium 提供如下方法&#xff1a; 序号方法/属性描述1accept()接受2dismis…