在Python中使用sqlite3进行数据持久化操作

news2024/11/18 21:26:16

目录

引言

一、安装sqlite3模块

二、创建数据库连接

三、创建游标对象

四、执行SQL命令

五、提交更改

六、关闭连接

七、使用参数化查询

八、使用ORM进行数据操作

九、备份和恢复数据库

十、处理大量数据

十一、优化查询性能

十二、处理并发访问

十三、处理数据持久化

十四、进行数据库备份与恢复

总结



引言

数据持久化是将数据从临时存储状态转换为永久存储状态的过程。在Python中,有很多种方法可以实现数据持久化,其中最常见的是使用关系型数据库,如MySQL、PostgreSQL等。然而,对于一些小型的项目或简单的数据存储需求,使用SQLite3这样的嵌入式数据库可能更加方便和高效。本篇文章将介绍如何在Python中使用sqlite3模块进行数据持久化操作。

一、安装sqlite3模块

在Python中,sqlite3模块是标准库的一部分,无需额外安装。你可以直接使用以下命令导入该模块:

import sqlite3

二、创建数据库连接

要使用sqlite3模块进行数据持久化操作,首先需要创建一个数据库连接。可以使用以下代码创建一个名为test.db的SQLite数据库连接:

conn = sqlite3.connect('test.db')

三、创建游标对象

创建数据库连接后,需要创建一个游标对象来执行SQL命令。可以使用以下代码创建一个游标对象:

cursor = conn.cursor()

四、执行SQL命令

创建游标对象后,可以使用它来执行SQL命令。以下是一些常见的SQL命令示例:

创建表:

CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)
插入数据:

INSERT INTO users (name, age) VALUES ('Alice', 25)
查询数据:

SELECT * FROM users WHERE age > 30
更新数据:

UPDATE users SET age = 31 WHERE id = 1
删除数据:

DELETE FROM users WHERE id = 1

五、提交更改

执行SQL命令后,需要使用commit()方法提交更改。例如:

conn.commit()

六、关闭连接

最后,记得关闭数据库连接以释放资源。可以使用以下代码关闭数据库连接:

conn.close()

七、使用参数化查询

为了避免SQL注入攻击,推荐使用参数化查询。参数化查询可以确保输入被正确处理,并且与查询分开,从而提高安全性。以下是一个使用参数化查询的示例:

name = 'Alice'  
age = 25  
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", (name, age))  
conn.commit()

八、使用ORM进行数据操作

ORM(对象关系映射)是一种将数据库表映射到Python类的技术。使用ORM可以使数据操作更加面向对象和易于管理。在Python中,有很多ORM框架可供选择,其中比较流行的有SQLAlchemy和Django ORM。以下是一个使用Django ORM的示例:

from django.db import models  
  
class User(models.Model):  
    name = models.CharField(max_length=100)  
    age = models.IntegerField()  
  
# 创建用户对象  
user = User(name='Alice', age=25)  
user.save()  
  
# 查询用户  
users = User.objects.filter(age__gt=30)  
for user in users:  
    print(user.name, user.age)

九、备份和恢复数据库

为了保证数据安全,需要定期备份数据库。可以使用sqlite3的backup()方法来备份数据库。以下是一个备份数据库的示例:

import sqlite3  
from sqlite3 import Error  
  
def backup_db(db_path, backup_path):  
    if not sqlite3.sqlite_version_info >= (3, 3, 4):  
        raise EnvironmentError("Backup requires SQLite version 3.3.4 or greater.")  
    try:  
        conn = sqlite3.connect(db_path)  
        cursor = conn.cursor()  
        with open(backup_path, "wb") as backup_file:  
            backup_file.write(conn.backup(backup_file))  
        return True  
    except Error as e:  
        print(e)  
    finally:  
        cursor.close()          
        conn.close()

十、处理大量数据

如果需要处理大量数据,建议使用事务(transaction)来一次性提交或回滚多个操作,以提高性能和减少数据库交互次数。可以使用conn.execute()方法执行事务,通过传入参数isolation_level设置隔离级别,例如:

conn.execute('BEGIN TRANSACTION;')  
try:  
    # 在这里执行多个SQL操作  
    cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Bob', 30))  
    cursor.execute('UPDATE users SET age = ? WHERE name = ?', (31, 'Alice'))  
    # 一次性提交事务  
    conn.execute('COMMIT;')  
except Exception as e:  
    # 如果出现异常,回滚事务  
    conn.execute('ROLLBACK;')  
    raise e  
finally:  
    conn.close()

十一、优化查询性能

对于大型数据表,查询性能可能会成为问题。以下是一些优化查询性能的方法:

1、使用索引:在经常用于查询条件的列上创建索引,可以加快查询速度。例如,可以在users表的name列上创建索引:

CREATE INDEX idx_users_name ON users (name);
2、减少查询返回结果:只获取需要的列,而不是使用SELECT *返回所有列。例如:

SELECT name, age FROM users WHERE age > 30;
3、使用连接(JOIN)代替子查询:在某些情况下,连接比子查询更高效。例如:

SELECT users.name, users.age FROM users JOIN orders ON users.id = orders.user_id WHERE orders.total > 100;

十二、处理并发访问

如果多个用户同时访问数据库,可能会导致并发问题。可以使用锁来防止并发访问导致的数据不一致。sqlite3支持对数据库进行锁定,可以通过以下代码实现:

conn = sqlite3.connect('test.db')  
conn.execute('BEGIN TRANSACTION;')  
try:  
    # 在这里执行SQL操作  
    cursor.execute('SELECT * FROM users WHERE age > ?', (30,))  
    # 获取共享锁,其他并发连接可以共享这个锁,直到事务结束或锁被释放为止。  
    conn.execute('SELECT * FROM locktable WHERE id = ?', (1,))  
    # 获取排他锁,其他并发连接无法访问这个锁所保护的表或行。  
    conn.execute('SELECT * FROM users WHERE age > ?', (30,))  
    # 释放锁,其他连接可以访问这个锁所保护的表或行。  
finally:  
    conn.execute('COMMIT;')  
    conn.close()

十三、处理数据持久化

数据持久化是将数据从内存存储到磁盘的过程,以保证数据在程序关闭后仍然可以持久保存。在Python中,可以使用sqlite3模块提供的数据库连接对象来实现数据持久化。以下是一个将数据持久化到数据库的示例:

import sqlite3  
  
# 创建数据库连接  
conn = sqlite3.connect('test.db')  
  
# 创建游标对象  
cursor = conn.cursor()  
  
# 创建数据表  
cursor.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')  
  
# 插入数据  
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 25))  
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Bob', 30))  
  
# 提交更改  
conn.commit()  
  
# 关闭连接  
conn.close()

在上面的示例中,我们首先创建了一个数据库连接对象,然后使用游标对象执行SQL命令来创建数据表和插入数据。最后,我们通过调用commit()方法提交更改,并关闭数据库连接。这样,数据就被持久化到数据库中了。

十四、进行数据库备份与恢复

为了保护数据安全,我们需要定期备份数据库。可以使用sqlite3模块提供的backup()方法来备份数据库。以下是一个备份数据库的示例:

import sqlite3  
from sqlite3 import Error  
  
def backup_db(db_path, backup_path):  
    if not sqlite3.sqlite_version_info >= (3, 3, 4):  
        raise EnvironmentError("Backup requires SQLite version 3.3.4 or greater.")  
    try:  
        conn = sqlite3.connect(db_path)  
        cursor = conn.cursor()  
        with open(backup_path, "wb") as backup_file:  
            backup_file.write(conn.backup(backup_file))  
        return True  
    except Error as e:  
        print(e)  
    finally:  
        cursor.close()          
        conn.close()

总结

在本文中,我们介绍了使用Python的sqlite3模块进行数据库操作的一些基本知识和技巧。首先,我们介绍了如何创建数据库连接、游标对象和数据表。接着,我们详细讲解了如何执行SQL查询、插入、更新和删除数据,以及如何使用参数化查询来避免SQL注入攻击。

此外,我们还介绍了如何使用ORM进行数据操作、处理大量数据、优化查询性能、处理并发访问以及进行数据库备份与恢复等方面的知识和技巧。通过这些内容,我们可以了解到使用Python的sqlite3模块进行数据库操作可以更加方便、灵活和高效。

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

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

相关文章

C/C++ stm32基础知识超详细讲解(系统性学习day14)

目录 前言 一、ARM和STM32是什么? 二、STM32的开发方式 三、GPIO----寄存器开发方式 1.八种输入输出模式分析 2.寄存器 四、stm32芯片图片 五、怎么学好stm32 总结 前言 stm32的广泛含义及背景: STM32是一款由意法半导体(ST&…

基于flask和fomantic-ui的简易p2p文件分享平台的手动实现

背景 开学一个多月了,由于繁重的学业和懒惰,都没怎么更新有意思的博客。 前几天突然想到了一个想法。同学之间平常用网络分享一个文件,大部分都是用的qq。但是qq看起来把文件拖到聊天框点击发送就发给对面同学了。但是实际上是先上传到了腾…

Spark通过三种方式创建DataFrame

通过toDF方法创建DataFrame 通过toDF的方法创建 集合rdd中元素类型是样例类的时候,转成DataFrame之后列名默认是属性名集合rdd中元素类型是元组的时候,转成DataFrame之后列名默认就是_N集合rdd中元素类型是元组/样例类的时候,转成DataFrame…

LLM prompt提示工程调试方法经验技巧汇总

现在接到一个LLM模型任务,第一反应就是能不能通过精调prompt来实现,因为使用prompt不需要训练模型,只需输入指令就可以实现和LLM的交互。按照以往经验,不同的prompt对模型输出影响非常大,如果能构造一个好的prompt&…

工业品电商,新的隐形冠军藏不住了?

【潮汐商业评论/原创】 “时代真的变了。”自打从淘宝买了一批配件后,工厂老板李瓦就经常感慨。 李瓦经营着一家专门生产机器零部件的工厂,日常经常要采购传送带、螺丝、螺母等材料,过去他主要通过线下的方式进货。但最近朋友圈里一段淘宝工…

2023.11.15 hive sql之函数标准,字符串,日期,数学函数

目录 一.函数分类标准 二.查看官方函数,与简单演示 三.3种类型函数演示 四.字符串函数 1.常见字符串函数 2.索引函数 解析函数 五.日期函数 1.获取当前时间 2.获取日期相关 3.周,季度等计算 4.时间戳 六.数学函数 一.函数分类标准 目前hive三大标准 UDF:&#xff08…

社区论坛小程序源码系统,功能齐全,页面简洁,前端+后端+完整部署教程

现如今,社区论坛已经成为人们交流思想,分享经验,获取信息的重要平台。近年来,小程序的出现更是改变了传统的网站建设方式,让用户体验更加便捷,高效。今天源码小编来和大家分享一款社区论坛小程序源码系统&a…

基于SSM的OA办公管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

exce常用

一、冻结 同时冻结行和列 打开一个Excel表格,点击选择需要冻结的行和列交接处对应的单元格(例如:需要同时冻结1、2行和A、B列,则选中行列交接对应的C3单元格)), 即下一行 和下一列的交接点。 …

使用grad-cam对ViT的输出进行可视化

使用grad-cam对ViT的输出进行可视化 文章目录 使用grad-cam对ViT的输出进行可视化前言原理使用代码Pytorch-grad-cam库的更多方法在MMpretrain中使用示例总结 前言 Vision Transformer (ViT) 作为现在CV中的主流backbone,它可以在图像分类任务上达到与卷积神经网络…

mysql数据库超过最大连接数

mysql 超过数据库最大连接数解决办法 1、报错信息 首先无论是navicat 执行sql还是 用idea启动多的服务都会有如下报错信息: 2、解决办法 2.1命令方式修改 这种方法是由其他资料提供的。这种修改方式是临时的,如果mysql服务重启设置就会还原&#xff…

弱类型和强类型自定义UDAF函数

目录 使用自带的avg函数弱类型自定义UDAF函数(AVG)强类型自定义UDAF函数(AVG) 弱类型:3.x过期 2.x有 强类型:3.x 2.x没有 使用自带的avg函数 import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame, SparkSession}object UserDefine…

双极膜电渗析设备

#双极膜电渗析设备 双极膜(bipolar membrance,简称BPM)是一种新型的离子交换复合膜,它通常由阳离子交换层(N型膜)、界面亲水层(催化层)和阴离子交换膜(P型膜)…

【计算思维】少儿编程蓝桥杯青少组计算思维题考试真题及解析C

【科技素养】少儿编程蓝桥杯青少组计算思维题考试真题及解析 1.天平的左右两端分别放有一些砝码,如下图所示,右边的砝码不变,从左边最多拿走几个砝码,可以使天平左右两边平衡: A、1 B、2 C、3 D、4 2.把下面的图形…

sqli-labs(Less-3)

1. 通过构造id1’ 和id1’) 和id1’)–确定存在注入 可知原始url为 id(‘1’) 2.使用order by 语句猜字段数 http://127.0.0.1/sqlilabs/Less-3/?id1) order by 4 -- http://127.0.0.1/sqlilabs/Less-3/?id1) order by 3 --3. 使用联合查询union select http://127.0.0.1…

Window MongoDB安装

三种NOSQL的一种,Redis MongoDB ES 应用场景: 1.社交场景:使用Mongodb存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人,地点等功能 2.游戏场景:使用Mongodb存储游戏用户信息,用户的装备,积分等直接以内嵌文档的形式存储,方便查询,高效率存储和访问…

IDEA创建JavaFX项目

1、New -> Project 2、选择JavaFX 配置项目名,包名,lib包管理工具,JDK版本(注,JDK版本最低需要11) 3、选择lib包 根据自己需求选择 lib包介绍 BootstrapFX:BootstrapFX 是一个为 JavaFX 提…

怎样正确选择等保测评机构开展等保测评工作?

随着大家对网络安全的重视,越来越多的企业需要做等保测评了。很多小伙伴想知道怎样正确选择等保测评机构开展等保测评工作?这里就给大家简单说说。 怎样正确选择等保测评机构开展等保测评工作? 【回答】:正确选择等保测评机构开展…

Java魔法解密:HashMap底层机制大揭秘

文章目录 一、 源码深度解析1.1 窥探Java集合框架中的设计思想1.2 逐行解读HashMap的源代码1.2.1 类信息1.2.2 常量属性1.2.3 变量属性1.2.4 节点信息1.2.5 构造方法1.2.6 put方法1.2.6.1 putVal方法1.2.6.2 putTreeVal方法1.2.6.3 tieBreakOrder方法1.2.6.4 treeifyBin方法1.2…