一.介绍
在本文中,我们将探讨如何在 Python 中使用 SQLite3,涵盖从基本操作到更高级技术的所有内容。SQLite3 是 SQLite 的最新版本,广泛用于移动和桌面应用程序。它是一个无服务器数据库,这意味着整个数据库都存储在磁盘上的单个文件中。这使得它非常适合需要轻量级数据库解决方案而又不需要完整数据库服务器开销的应用程序。要开始在 Python 中使用 SQLite3,如果您使用的是 Python 2.5 或更高版本,则无需安装任何额外内容,因为 SQLite3 模块包含在标准库中。
1. 连接到数据库
使用 SQLite3 的第一步是建立与数据库的连接。以下是操作方法。
import sqlite3
# Connect to a database (or create it if it doesn't exist)
conn = sqlite3.connect('test.db')
# Create a cursor object to execute SQL commands
cursor = conn.cursor()
# Don't forget to close the connection when you're done
conn.close()
2.创建表
连接后,您可以使用 SQL 命令创建表。以下是示例。
# Create a table
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL
)
''')
# Commit the changes
conn.commit()
3.插入数据
要将数据插入表中,可以使用 INSERT SQL 命令。
# Insert a single row
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ("Loki", "Loki@example.com"))
# Insert multiple rows
users_data = [
("Rahul", "Rahul@example.com"),
("Sunil", "Sunil@example.com")
]
cursor.executemany("INSERT INTO users (name, email) VALUES (?, ?)", users_data)
# Commit the changes
conn.commit()
4.查询数据
要从数据库中检索数据,可以使用 SELECT SQL 命令。
# Fetch all rows
cursor.execute("SELECT * FROM users")
all_users = cursor.fetchall()
for user in all_users:
print(f"ID: {user[0]}, Name: {user[1]}, Email: {user[2]}")
# Fetch a single row
cursor.execute("SELECT * FROM users WHERE name=?", ("Loki",))
data = cursor.fetchone()
print(f"Loki's email: {data[2]}")
5.更新和删除数据
您可以使用 UPDATE 和 DELETE SQL 命令更新和删除数据。
# Update data
cursor.execute("UPDATE users SET email=? WHERE name=?", ("newloki@example.com", "Loki"))
# Delete data
cursor.execute("DELETE FROM users WHERE name=?", ("Rahul",))
# Commit the changes
conn.commit()
6.使用参数化查询
如上例所示,使用参数化查询对于防止 SQL 注入攻击至关重要。始终在 SQL 语句中使用?占位符,并将值作为元组传递。
name = "Aditya"
email = "Aditya@example.com"
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", (name, email))
7.处理事务
SQLite3 支持事务,允许您将多个操作组合在一起。
try:
conn.execute("BEGIN TRANSACTION")
# Perform multiple operations here
conn.execute("INSERT INTO users (name, email) VALUES (?, ?)", ("Ravi", "Ravi@example.com"))
conn.execute("UPDATE users SET email=? WHERE name=?", ("updatesunil@example.com", "Sunil"))
conn.commit()
except sqlite3.Error:
conn.rollback()
print("An error occurred. Transaction rolled back.")
8.错误处理
使用数据库时处理潜在错误非常重要。
try:
# Database operations here
cursor.execute("INSERT INTO test_table VALUES (1, 2, 3)")
except sqlite3.Error as e:
print(f"An error occurred: {e}")
finally:
conn.close()
二.最佳实践
- 始终使用参数化查询来防止 SQL 注入。
- 完成后关闭数据库连接。
- 使用语句自动管理您的连接。
with sqlite3.connect('example.db') as conn:
# Your database operations here
pass # The connection will be automatically closed
- 对于较大的项目,考虑使用 SQLAlchemy 之类的 - ORM(对象关系映射)库。
- 定期备份您的 SQLite 数据库文件。
- 对于需要原子的操作使用事务。
三.概括
SQLite3 是一款功能强大且轻量级的数据库解决方案,可与 Python 无缝集成。无论您是构建小型应用程序还是为大型系统设计原型,SQLite3 都是使用 Python 关系数据库的绝佳起点。