您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么用Python操作SQLite数据库
## 目录
1. [SQLite简介](#sqlite简介)
2. [Python中的SQLite支持](#python中的sqlite支持)
3. [连接数据库](#连接数据库)
4. [创建表](#创建表)
5. [增删改查操作](#增删改查操作)
- [插入数据](#插入数据)
- [查询数据](#查询数据)
- [更新数据](#更新数据)
- [删除数据](#删除数据)
6. [事务处理](#事务处理)
7. [高级操作](#高级操作)
- [使用占位符](#使用占位符)
- [批量操作](#批量操作)
- [执行脚本](#执行脚本)
8. [实战案例](#实战案例)
9. [总结](#总结)
---
## SQLite简介
SQLite是一个轻量级的嵌入式关系型数据库,具有以下特点:
- 零配置:无需服务器进程或安装配置
- 无服务器:直接读写普通磁盘文件
- 单文件:整个数据库存储在一个文件中
- 跨平台:支持所有主流操作系统
- 支持标准SQL语法
SQLite非常适合小型应用、移动应用和嵌入式设备,也是Python内置支持的数据库模块。
---
## Python中的SQLite支持
Python通过`sqlite3`模块提供SQLite支持,该模块具有以下特性:
- 符合PEP 249规范的DB-API 2.0接口
- 线程安全(但连接对象不能在线程间共享)
- 支持上下文管理器(with语句)
- 内置在Python标准库中,无需额外安装
```python
import sqlite3
print(sqlite3.sqlite_version) # 查看SQLite版本
# 连接到数据库(不存在则自动创建)
conn = sqlite3.connect('example.db')
# 获取游标对象
cursor = conn.cursor()
# 执行操作...
# 关闭连接
conn.close()
with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
# 执行操作...
# 无需显式关闭,with块结束自动关闭
# 创建内存中的临时数据库
conn = sqlite3.connect(':memory:')
def create_table():
with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
email TEXT UNIQUE)''')
conn.commit()
create_table()
注意事项:
- IF NOT EXISTS
避免重复创建
- PRIMARY KEY
定义主键
- AUTOINCREMENT
自动递增
- UNIQUE
确保唯一性
- 最后需要commit()
提交更改
def insert_user(name, age, email):
with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)",
(name, age, email))
conn.commit()
return cursor.lastrowid # 返回最后插入的rowid
user_id = insert_user('张三', 25, 'zhangsan@example.com')
def get_all_users():
with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
return cursor.fetchall() # 获取所有记录
users = get_all_users()
for user in users:
print(user)
def get_user_by_name(name):
with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE name=?", (name,))
return cursor.fetchone() # 获取单条记录
user = get_user_by_name('张三')
def update_user_age(name, new_age):
with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
cursor.execute("UPDATE users SET age=? WHERE name=?",
(new_age, name))
conn.commit()
return cursor.rowcount # 返回受影响的行数
rows_updated = update_user_age('张三', 26)
def delete_user(name):
with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
cursor.execute("DELETE FROM users WHERE name=?", (name,))
conn.commit()
return cursor.rowcount
rows_deleted = delete_user('张三')
SQLite支持ACID事务,Python中可以通过以下方式管理:
try:
with sqlite3.connect('example.db') as conn:
conn.execute("BEGIN") # 显式开始事务
# 执行多个操作...
conn.commit() # 提交事务
except sqlite3.Error:
conn.rollback() # 出错时回滚
或者使用更简洁的上下文管理器方式:
with sqlite3.connect('example.db') as conn:
with conn: # 自动提交/回滚的事务块
conn.execute("INSERT INTO users (name) VALUES ('李四')")
conn.execute("UPDATE users SET age=30 WHERE name='王五'")
推荐使用?
占位符而非字符串格式化,防止SQL注入:
# 安全的方式
cursor.execute("SELECT * FROM users WHERE name=?", (user_input,))
# 危险的方式(不要这样做!)
cursor.execute(f"SELECT * FROM users WHERE name='{user_input}'")
使用executemany
提高批量插入效率:
users = [('李四', 28, 'lisi@test.com'),
('王五', 32, 'wangwu@test.com')]
with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
cursor.executemany("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", users)
conn.commit()
从文件执行SQL脚本:
with sqlite3.connect('example.db') as conn, open('schema.sql') as f:
conn.executescript(f.read())
import sqlite3
def init_db():
with sqlite3.connect('school.db') as conn:
conn.execute('''CREATE TABLE IF NOT EXISTS students
(id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
grade INTEGER CHECK(grade BETWEEN 1 AND 12),
score REAL DEFAULT 0.0)''')
def add_student(name, grade, score=0.0):
with sqlite3.connect('school.db') as conn:
with conn:
conn.execute("INSERT INTO students (name, grade, score) VALUES (?, ?, ?)",
(name, grade, score))
def get_top_students(limit=5):
with sqlite3.connect('school.db') as conn:
cursor = conn.cursor()
cursor.execute("SELECT name, score FROM students ORDER BY score DESC LIMIT ?",
(limit,))
return cursor.fetchall()
# 使用示例
init_db()
add_student('小明', 3, 95.5)
add_student('小红', 3, 98.0)
top_students = get_top_students()
Python操作SQLite数据库的主要步骤:
sqlite3.connect()
建立连接?
占位符避免SQL注入commit()
提交SQLite+Python的组合非常适合: - 小型应用和原型开发 - 数据分析和处理 - 嵌入式系统和移动应用 - 需要本地数据存储的场景
通过合理设计表结构和索引,即使处理数万条记录也能保持良好的性能。
”`
注:本文实际约2300字,可根据需要补充更多细节或实际案例以达到2450字要求。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。