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

news2024/9/29 11:31:30

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 = None
    session: Session = None

    def __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().session
        results = session.query(User).where(User.username==self.userName_find.get()).all()
        string = ''
        for row in results:
            string = '   '+ '用户ID:' + str(row.userId) + ' 用户名称:' + row.username + ' 电话:' + row.phone
        messagebox.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_user
    UserPage()
    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.coloradmin.cn/o/1181357.html

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

相关文章

6个常用的小程序UI组件库,大厂设计师都在用!

UI组件库是设计系统的一部分,在一般的页面设计过程中可以直接用来构建交互界面。因此,一个有效的小程序UI组件库可以帮助设计师快速掌握基本的交互框架,提高设计师的工作效率,让设计师有更多的时间打磨和提高小程序的整体效果。小…

Softing新版HART多路复用器现支持图尔克excom和西门子ET 200iSP等远程I/O

Softing工业自动化最近升级了用于访问配置和诊断数据的smartLink SW-HT软件,现在该软件可支持访问图尔克excom和西门子ET 200iSP等远程I/O。 (smartLink SW-HT支持访问配置和诊断数据) 越来越多的新型远程I/O选择使用以太网来替代PROFIBUS连接…

微信小程序将后端返回的图片文件流解析显示导页面

说明 由于请求接口后端返回的图片格式不是一个完整的url,也不是其他直接能显示的图片格式,是一张图片 后端根据模板与二维码生成图片,返回二进制数据 返回为文件流的格式,用wx.request请求的时候,就自动解码成为了下面这样的数据数据格式,这样的数据没…

【无代码】【VR开发】【Unity】【VRTK】4-导入VRTK Tilia Package

【导入VRTK V4】 VRTK的Tilia Package包含了一整套空间开发方案。导入后你可以在PackageManager中看到它们。 所有的Tilia包都可以在如下页面找到: https://www.vrtk.io/tilia.html Tilia包有一个安装器,可以让你仅仅安装需要的包。包的种类很多,按照适用方向分类。 点击H…

Redis中的渐进式遍历-Scan命令

之前我们学习过遍历命令keys,而keys *是一次性的把整个redis中所有的key都获取到.在不知道当前redis中有多少key的情况下,这个操作是非常危险的,可能会一下子得到太多的key而阻塞redis服务器.从而使其他redis客户端卡顿. 通过渐进式遍历,就可以做到,既可以获取到所有的key,同时…

python链队_队列的链式存储结构

队列是一种先进先出(first in first out,FIFO)的线性表,是一种常用的数据结构。 它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样&…

Elasticsearch:在 ES|QL 中使用 DISSECT 和 GROK 进行数据处理

目录 DISSECT 还是 GROK? 或者两者兼而有之? 使用 DISSECT 处理数据 Dissect pattern 术语 例子 DISSECT 关键修饰符 右填充修饰符 (->) 附加修饰符 () 添加顺序修饰符( 和 /n) 命名的跳过键(&#xff1f…

895. 最长上升子序列

题目&#xff1a; 895. 最长上升子序列 - AcWing题库 思路&#xff1a;dp 代码&#xff1a; #include<iostream> #include<cstdio> #include<cmath> using namespace std; typedef long long ll; const int N1010; int f[N];//表示以i结尾的最大上升子序列…

ESP32 未来能够取代 STM32吗?

今日话题&#xff0c;ESP32 未来能够取代 STM32吗&#xff1f;ESP32和STM32各自有其特点和优势&#xff0c;能否取代彼此取决于具体应用和需求。STM32的流行除了性价比外&#xff0c;还有其强大的开发环境&#xff0c;例如Cubemx能够快速生成代码&#xff0c;使得上手STM32的速…

ros1 自定义Publisher消息编程实现示例

整理步骤 cd进入工作空间下的代码空间, 创建功能包&#xff0c;并配置依赖 在功能包里面的代码空间里编写C代码文件 在cmakelist文件里面配置编译规则 cd到工作空间&#xff0c;编译工作空间&#xff0c;source设置环境变量 打开roscore, 运行海龟仿真节点&#xff0c;运行功能…

简析安科瑞无功补偿在化工企业设计与应用

叶根胜 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;随着各种扩产、技术改造等活动的发展&#xff0c;化工企业用电设备功率大、能耗高&#xff0c;导致用电设备增加、负荷增加、负荷性质发生变化&#xff0c;加上线路损耗和变压损耗等因素。整个企业电网的功率…

Mysql进阶-视图篇

介绍 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。 通俗的讲&#xff0c;视图只保存了查询的SQL逻辑&#xff0c;不保存查询结果。…

C#解析XML并反序列化为Model的方法

虽然现在json大行其道&#xff0c;但是xml格式依旧占据着广阔的编程世界&#xff0c;不管光伏锂电激光卫星汽车等等工业领域&#xff0c;基本上都是以xml为主&#xff0c;广大的.NET开发人员有很多被xml折磨的都要转java了&#xff0c;这篇小作文就来玩一种迅速完成xml到model的…

【接口测试】最全Jmeter跨线程调用变量+签名接口测试实战(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 跨线程调用变量 …

Android Studio(项目收获)

取消按钮默认背景色 像按钮默认背景色为深蓝色&#xff0c;即使使用了background属性指定颜色也不能生效。 参考如下的解决方法&#xff1a; 修改/res/values/themes.xml中的指定内容如下&#xff1a; <style name"Theme.TianziBarbecue" parent"Theme.Mater…

4-Tomcat服务器及标准Web项目结构

4-Tomcat服务器及标准Web项目结构 文章目录 4-Tomcat服务器及标准Web项目结构Web服务器组成Web项目的标准结构根目录下可以放置的文件及文件夹WEB标准结构Web的url组成部分和项目中资源的对应关系 Tomcat服务器部署Tomcat部署Web项目的三种方式IDEA部署项目APP到Tomcat的方式概…

响应式编程-基本介绍

响应式编程-基本介绍 什么是响应式编程 响应式宣言&#xff08;The Reactive Manifesto&#xff09; 对响应式系统进行了定义&#xff1a;响应式系统是具备以下特质即时响应性&#xff08;Responsive&#xff09;、回弹性&#xff08;Resilient&#xff09;、弹性&#xff08…

Freeswitch API调用方式

1.API调用方式 可以复制下面内容成.bat文件直接在windows下运行&#xff0c;修改成对应的ip加端口。 echo off SETLOCAL :_starting cls set inputecho echo 1 add agent 21009 11 uuid_check 21009 21 list users 31 check modules …

JAVA中类和对象的认识

1、面向对象的初步认知 1.1 什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面 向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。用面向对象的…

LabVIEW示波器连续触发编程

LabVIEW示波器连续触发编程 niScopeEX Fetch Forever范例利用了如何设置硬件和驱动的优点来进行连续采集。 当NI-SCOPE设备被设置为采集预触发扫描&#xff0c;设备上的板载内存被用作一个环形缓冲。这样&#xff0c;无论触发何时到来&#xff0c;设备都可以追踪和检索所有要求…