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,一经查实,立即删除!

相关文章

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

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

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

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

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通过调试…

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

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

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 …

第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…

Unity 声音的控制

闲谈&#xff1a; 游戏开发比普通软件开发难也是有原因的&#xff0c;第一 游戏功能需求变化多样内部逻辑交错纵横&#xff0c; 而软件相对固定&#xff0c;无非也就是点击跳转、数据存储 第二&#xff0c;游戏需要很多3D数学知识、物理知识&#xff0c;最起码得有高中物理的基…

人类和 AI 能够“双向奔赴”吗? | 近匠

新技术时代已经开启&#xff0c;人类首次接触生成式人工智能&#xff0c;使用对话的方式和大语言模型交互&#xff0c; 过往的经验究竟还能不能作用于这些前沿技术&#xff1f; 针对这一问题&#xff0c;本期《新程序员》采访了一 位拥有20年技术领导经验的技术预测者&#xff…

2011年01月25日 Go生态洞察:Go与JSON的高效结合

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

C#,数值计算——函数计算,切比雪夫近似算法(Chebyshev approximation)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Chebyshev approximation /// </summary> public class Chebyshev { private int n { get; set; } private int m { get; set; } privat…

2023年下半年架构案例真题及答案

案例的考点&#xff1a; 大数据架构 Lambda架构和Kappa架构 jwt特点 数据持久层&#xff0c;Redis数据丢失&#xff0c;数据库读写分离方案 Hibernat架构 SysML七个关系&#xff0c;填需求图 大数据的必选题&#xff1a; 某网作为某电视台在互联网上的大型门户入口&#…

第二证券:长期停牌一般是多久?

股票停牌不仅仅是个股的问题&#xff0c;它或许会影响到商场的整体运作和投资者的利益。那么&#xff0c;长期停牌一般是多久呢&#xff1f;从不同的视点分析&#xff0c;可以得到不同的答案。 1. 官方规则 首要&#xff0c;咱们需求查看相关规则。依据证监会规则&#xff0c…

Kafka入门

kafka无疑是当今互联网公司使用最广泛的分布式实时消息流系统&#xff0c;它的高吞吐量&#xff0c;高可靠等特点为并发下的大批量实时请求处理提供了可靠保障。很多同学在项目中都用到过kafka&#xff0c;但是对kafka的设计原理以及处理机制并不是十分清楚。为了知其然知其所以…

通达OA V12版,引入thinkphp5.1框架,及获取session

通达OA V12版&#xff0c;引入thinkphp5.1框架 如下过程引入如下问题&#xff0c;按上述问题解决htmlentities(): charset cp936 not supported, assuming utf-8 内容绝对原创&#xff0c;希望对您有帮助。您的打赏&#xff0c;是让我持续更新的牛奶和面包 如下过程引入 在D:/…

项目实战:优化Servlet,把所有围绕Fruit操作的Servlet封装成一个Servlet

1、FruitServlet 这些Servlet都是围绕着Fruit进行的把所有对水果增删改查的Servlet放到一个Servlet里面&#xff0c;让tomcat实例化一个Servlet对象 package com.csdn.fruit.servlet; import com.csdn.fruit.dto.PageInfo; import com.csdn.fruit.dto.PageQueryParam; import c…

uniapp u-tabs表单如何默认选中

首先先了解该组件&#xff1b;该组件&#xff0c;是一个tabs标签组件&#xff0c;在标签多的时候&#xff0c;可以配置为左右滑动&#xff0c;标签少的时候&#xff0c;可以禁止滑动。 该组件的一个特点是配置为滚动模式时&#xff0c;激活的tab会自动移动到组件的中间位置。 …

asp.net core mvc之路由

一、默认路由 &#xff08;Startup.cs文件&#xff09; routes.MapRoute(name: "default",template: "{controllerHome}/{actionIndex}/{id?}" ); 默认访问可以匹配到 https://localhost:44302/home/index/1 https://localhost:44302/home/index https:…