当前位置: 首页 > news >正文

如何使用 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()
注意事项
  1. 错误处理:在实际开发中,应该添加错误处理机制,以防止数据库操作失败或其他异常情况。
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()
  1. 上下文管理器:为了确保资源被正确释放,可以使用上下文管理器(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}")
实际开发中的建议
  1. 错误处理:始终添加错误处理机制,以确保在数据库操作失败时能够捕获并处理异常。
  2. 资源管理:使用上下文管理器来管理数据库连接和游标,确保资源被正确释放。
  3. 参数化查询:使用参数化查询来防止SQL注入攻击,确保数据库操作的安全性。
  4. 事务管理:合理使用事务来确保数据的一致性和完整性。
  5. 日志记录:在生产环境中,添加日志记录机制,以便在出现问题时能够追踪和调试。

在Python中连接SQLite数据库,sqlite3 模块提供了一个简单且强大的接口。通过合理使用上下文管理器、参数化查询和事务管理,可以提高代码的健壮性和性能,确保数据库操作的安全性和可靠性。在实际开发中,应该注意错误处理、资源管理和日志记录,以确保系统的稳定性和可维护性。

通过这些方法和技巧,你可以有效地连接和管理SQLite数据库,满足各种复杂的需求。希望这些内容对你有所帮助,如果你有任何问题或需要进一步的讨论,请随时提问。

相关文章:

如何使用 Python 连接 SQLite 数据库?

SQLite是一种轻量级的嵌入式数据库,广泛应用于各种应用程序中。 Python提供了内置的sqlite3模块,使得连接和操作SQLite数据库变得非常简单。 下面我将详细介绍如何使用sqlite3模块来连接SQLite数据库,并提供一些实际开发中的建议和注意事项…...

【博弈模型】古诺模型、stackelberg博弈模型、伯特兰德模型、价格领导模型

博弈模型 1、古诺模型(cournot)(1)假设(2)行为分析(3)经济后果(4)例题 2、stackelberg博弈模型(产量领导模型)(1&#xff…...

单片机:实现花样灯数码管的显示(附带源码)

单片机实现花样灯数码管显示 数码管(七段数码管)广泛用于数字显示,例如时钟、计数器、温度计等设备。在本项目中,我们将使用单片机实现花样灯数码管的显示效果。所谓花样灯显示是指通过控制数码管上的各个段位,以不同…...

什么是芯片电阻

有人把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 与直线&#xf…...

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语言(结构体练习)

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

你了解网络层的 ICMP 吗?

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

清理C盘小记

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

Excel中如何消除“长短款”

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

超越 RAG 基础:AI 应用的高级策略

作者&#xff1a;来自 Elastic Elastic Platform Team 我们最近与 Cohere 举办的虚拟活动深入探讨了检索增强生成 (retrieval augmented generation - RAG) 的世界&#xff0c;重点讨论了在概念验证阶段之后构建 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...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...