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

embedded/2024/12/23 8:25:16/

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数据库,满足各种复杂的需求。希望这些内容对你有所帮助,如果你有任何问题或需要进一步的讨论,请随时提问。


http://www.ppmy.cn/embedded/148028.html

相关文章

flask-admin+Flask-WTF 实现实现增删改查

背景: flask-adminflask-wtf在网上可以搜索到很多资料,但有价值的很少,或许是太简单,或者是很少人这么用,或者。。。,本文将作者近礼拜摸索到的一点经验分享出来,给自己做个记录。 材料&#…

tryhackme-Pre Security-HTTP in Detail(HTTP的详细内容)

任务一:What is HTTP(S)?(什么是http(s)) 1.What is HTTP? (HyperText Transfer Protocol)(什么是 HTTP?(超文本传输协议)) http是你查看网站的时候遵循的…

探索 Vue.js 组件开发:从基础到进阶的完整指南

引言 在现代前端开发中,Vue.js 凭借其易用性和强大的功能,成为了开发者钟爱的框架之一。其核心理念——组件化开发,不仅让代码更加模块化、可维护,还大大提高了开发效率。本文将从基础入手,详细探讨 Vue.js 组件开发的…

uniapp blob格式转换为video .mp4文件使用ffmpeg工具

前言 介绍一下这三种对象使用场景 您前端一旦涉及到文件或图片上传Q到服务器,就势必离不了 Blob/File /base64 三种主流的类型它们之间 互转 也成了常态 Blob - FileBlob -Base64Base64 - BlobFile-Base64Base64 _ File uniapp 上传文件 现在已获取到了blob格式的…

CH430N 插上电脑无反应

电路图,此处我用的是3.3V供电,现象就是插上USB,电脑没有反应。搜索也搜索不到 抄板请看自己是多少V供电 后来看到也有类似的 换了芯片后就好了。md新板子第一个芯片就是坏的,服了。

宠物管理系统(3):Controller类

模仿三层架构中的Controller编写的控制器(但是这并非是真的),用于处理不同的情境。 MainController,用于控制整个主程序: package com.wzb.controller;import com.wzb.utils.menu.MainMenu; import com.wzb.utils.wai…

RabbitMQ消息可靠性保证机制7--可靠性分析-rabbitmq_tracing插件

rabbitmq_tracing插件 rabbitmq_tracing插件相当于Firehose的GUI版本,它同样能跟踪RabbitMQ中消息的注入流出情况。rabbitmq_tracing插件同样会对流入流出的消息进行封装,然后将封装后的消息日志存入相应的trace文件中。 # 开启插件 rabbitmq-plugins …

项目配置设置 (芒果头条项目进度2)

一 创建项目 1.准备项⽬代码仓库 源码托管⽹站 码云 https://gitee.com/ (国内)Github https://github.com/ (国外)Gitlab(企业中公司⾃⼰搭建) 1.1 创建源码仓库 2.克隆项⽬代码仓库 1. 进⼊本地项⽬⽬录 $ mkdir ~/Desktop/djprojects $ cd djprojects 2. 克隆仓库 $ …