如何使用 Python 连接 SQLite 数据库?
SQLite是一种轻量级的嵌入式数据库,广泛应用于各种应用程序中。
Python提供了内置的sqlite3
模块,使得连接和操作SQLite数据库变得非常简单。
下面我将详细介绍如何使用sqlite3
模块来连接SQLite数据库,并提供一些实际开发中的建议和注意事项。
1. 使用 sqlite3
连接SQLite数据库
sqlite3
是Python标准库中的一个模块,无需额外安装即可使用。
连接数据库
下面是一个简单的示例,展示如何连接到SQLite数据库:
import sqlite3# 创建数据库连接
conn = sqlite3.connect('example.db')# 创建游标对象
cur = conn.cursor()# 创建表
cur.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY,name TEXT NOT NULL,email TEXT NOT NULL)''')# 插入数据
cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))# 提交事务
conn.commit()# 查询数据
cur.execute("SELECT * FROM users")
rows = cur.fetchall()for row in rows:print(row)# 关闭游标和连接
cur.close()
conn.close()
注意事项
- 错误处理:在实际开发中,应该添加错误处理机制,以防止数据库操作失败或其他异常情况。
import sqlite3try:conn = sqlite3.connect('example.db')cur = conn.cursor()cur.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY,name TEXT NOT NULL,email TEXT NOT NULL)''')cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))conn.commit()cur.execute("SELECT * FROM users")rows = cur.fetchall()for row in rows:print(row)
except sqlite3.Error as e:print(f"Error: {e}")
finally:if cur:cur.close()if conn:conn.close()
- 上下文管理器:为了确保资源被正确释放,可以使用上下文管理器(
with
语句)来管理数据库连接和游标。
import sqlite3try:with sqlite3.connect('example.db') as conn:with conn.cursor() as cur:cur.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY,name TEXT NOT NULL,email TEXT NOT NULL)''')cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))conn.commit()cur.execute("SELECT * FROM users")rows = cur.fetchall()for row in rows:print(row)
except sqlite3.Error as e:print(f"Error: {e}")
2. 使用参数化查询
为了避免SQL注入攻击,应该使用参数化查询。
import sqlite3try:with sqlite3.connect('example.db') as conn:with conn.cursor() as cur:cur.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY,name TEXT NOT NULL,email TEXT NOT NULL)''')cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))conn.commit()cur.execute("SELECT * FROM users WHERE name = ?", ('Alice',))rows = cur.fetchall()for row in rows:print(row)
except sqlite3.Error as e:print(f"Error: {e}")
3. 使用事务
SQLite支持事务操作,可以通过事务来确保数据的一致性和完整性。
import sqlite3try:with sqlite3.connect('example.db') as conn:with conn.cursor() as cur:cur.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY,name TEXT NOT NULL,email TEXT NOT NULL)''')conn.execute("BEGIN TRANSACTION")try:cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))conn.commit()except sqlite3.Error as e:conn.rollback()print(f"Error: {e}")cur.execute("SELECT * FROM users")rows = cur.fetchall()for row in rows:print(row)
except sqlite3.Error as e:print(f"Error: {e}")
实际开发中的建议
- 错误处理:始终添加错误处理机制,以确保在数据库操作失败时能够捕获并处理异常。
- 资源管理:使用上下文管理器来管理数据库连接和游标,确保资源被正确释放。
- 参数化查询:使用参数化查询来防止SQL注入攻击,确保数据库操作的安全性。
- 事务管理:合理使用事务来确保数据的一致性和完整性。
- 日志记录:在生产环境中,添加日志记录机制,以便在出现问题时能够追踪和调试。
在Python中连接SQLite数据库,sqlite3
模块提供了一个简单且强大的接口。通过合理使用上下文管理器、参数化查询和事务管理,可以提高代码的健壮性和性能,确保数据库操作的安全性和可靠性。在实际开发中,应该注意错误处理、资源管理和日志记录,以确保系统的稳定性和可维护性。
通过这些方法和技巧,你可以有效地连接和管理SQLite数据库,满足各种复杂的需求。希望这些内容对你有所帮助,如果你有任何问题或需要进一步的讨论,请随时提问。
相关文章:
如何使用 Python 连接 SQLite 数据库?
SQLite是一种轻量级的嵌入式数据库,广泛应用于各种应用程序中。 Python提供了内置的sqlite3模块,使得连接和操作SQLite数据库变得非常简单。 下面我将详细介绍如何使用sqlite3模块来连接SQLite数据库,并提供一些实际开发中的建议和注意事项…...

【博弈模型】古诺模型、stackelberg博弈模型、伯特兰德模型、价格领导模型
博弈模型 1、古诺模型(cournot)(1)假设(2)行为分析(3)经济后果(4)例题 2、stackelberg博弈模型(产量领导模型)(1ÿ…...
单片机:实现花样灯数码管的显示(附带源码)
单片机实现花样灯数码管显示 数码管(七段数码管)广泛用于数字显示,例如时钟、计数器、温度计等设备。在本项目中,我们将使用单片机实现花样灯数码管的显示效果。所谓花样灯显示是指通过控制数码管上的各个段位,以不同…...

什么是芯片电阻
有人把Chip Resistor翻译成“芯片电阻”,我觉得翻译成“贴片电阻”或“片状电阻”更合适。有些厂商也称之为”电阻片”,英文写作Resistor Chip。比如:Thick film resistor chips(厚膜电阻片)、Thin film resistor chip…...
【C++】sophus : geometry.hpp 位姿(SE2 和 SE3)和(2D 直线\3D 平面)转换函数 (五)
这段代码定义了一系列在位姿(SE2 和 SE3)和几何实体(2D 直线和 3D 平面)之间进行转换的函数。它利用了 Sophus 库中已有的旋转表示(SO2 和 SO3)。 以下是函数的详细解释: 1. SO2 与直线…...
moment()获取时间
moment 是一个 JavaScript 日期处理类库。 使用: //安装 moment npm install moment -- save引用 //在main.js中全局引入 import moment from "moment"设定moment区域为中国 //import 方式 import moment/locale/zh-cn moment.locale(zh-cn); 挂载全…...
Azure虚拟机非托管磁盘大小调整
想要扩容一个Azure VM 的磁盘空间,门户里面竟然无法扩展,点点鼠标就完事的时代在离去,微软越来不想微软。 在门户里面即便使用Azure Cli命令行也不行。 PS /home/gpchina> az disk list [] 返回为空,根本没有返回磁盘。 不过使…...
流匹配模型[Flow Matching]
流匹配模型:概念、优缺点与扩散模型的对比 在生成建模领域,流匹配模型(Flow Matching)是一种通过学习流场将初始分布(通常是高斯噪声)变换为目标分布的新型框架。本文将对流匹配模型的概念、与扩散模型的联…...

Unix 和 Windows 的有趣比较
Unix 和 Windows NT 比较 来源于这两本书,把两本书对照来读,发现很多有意思的地方: 《Unix 传奇》 https://book.douban.com/subject/35292726/ 《观止 微软创建NT和未来的夺命狂奔 》 Showstopper!: The Breakneck Race to Create Windows…...
算法(三)——贪心算法
文章目录 定义基本原理基本思路优缺点优点缺点 经典案例及解析找零问题问题描述贪心思路算法解析java代码示例 活动选择问题问题描述贪心思路算法解析java代码示例 车辆路径问题问题描述贪心思路算法分析java代码示例 定义 贪心算法是指在求解问题时,总是做出在当前…...

LeetCode 704.二分查找
LeetCode 704.二分查找 思路🧐: 在本篇以及之后几篇的博客中,博主将会用二分法进行解答,以此巩固二分题型。二分法一般用于具有二段性的数据中使用。比如该题为有序数组,需要我们查找一个目标值target,分析…...

Linux介绍与安装CentOS 7操作系统
什么是操作系统 操作系统,英⽂名称 Operating System,简称 OS,是计算机系统中必不 可少的基础系统软件,它是 应⽤程序运⾏以及⽤户操作必备的基础环境 ⽀撑,是计算机系统的核⼼。 操作系统的作⽤是管理和控制计算机系…...
使用 rbenv 切换 Ruby 版本
1. 查看当前 Ruby 版本 首先,查看当前系统中安装的 Ruby 版本: ruby -v如果你已经安装了 rbenv,可以列出通过 rbenv 安装的 Ruby 版本: rbenv versions2. 安装 Ruby 版本 如果你想安装新的 Ruby 版本,使用以下命令…...

C语言(结构体练习)
设计一个结构体,存放一个学员信息并显示,存放两个学员信息,算他们的平均分。 #include <stdio.h> #include <string.h>// 定义结构体 typedef struct {char name[50];float score; } Student;// 函数声明 void display(Student student); f…...

你了解网络层的 ICMP 吗?
你了解网络层的 ICMP 吗? 一. 什么是 ICMP二. ICMP 的工作原理三. ICMP 的结构四. ICMP 的常见应用五. ICMP 的局限性与安全性六. 总结 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神…...

清理C盘小记
突然C盘就爆满了,想当初还是给他预留了120G的空间,感觉到现在也不够用了,担心出现死机的情况就赶紧进行了清理。有一说一,清理回收站是真的有用。 参考:C盘清理指南,清理出30G起,超详细总结&am…...

Excel中如何消除“长短款”
函数微调可以可以实施,简单且易于操作的气球🎈涨缩更妙。 (笔记模板由python脚本于2024年12月17日 06:19:13创建,本篇笔记适合用Excel操作数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Fre…...

超越 RAG 基础:AI 应用的高级策略
作者:来自 Elastic Elastic Platform Team 我们最近与 Cohere 举办的虚拟活动深入探讨了检索增强生成 (retrieval augmented generation - RAG) 的世界,重点讨论了在概念验证阶段之后构建 RAG 应用程序的关键注意事项。我们的演讲者是 Elastic 的首席解…...
[shader]【图形渲染】【unity】【游戏开发】 Shader数学基础2-认识点和矢量
在计算机图形学和Shader编程中,点和矢量是两种常见且基础的数学对象。它们在空间中的作用和性质是理解图形渲染的关键。本篇文章将深入探讨点(Point)和矢量(Vector)的定义、特性以及它们之间的关系。 1. 点(Point)的定义 在数学和计算机图形学中,**点(Point)**用于…...

微软开源Python Markdown转换工具
分享一个microsoft开源的Python工具——markitdown,轻松将各类文件转换为Markdown格式。 markitdown支持的文件格式 PDF(.pdf)PowerPoint(.pptx)Word(.docx)Excel(.xlsx)图片(支持EXIF元数据和OCR识别)音频(支持EXIF元数据和语音转录)HTML(包括对Wikipedia...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...