怎么用python操作sqlite数据库

发布时间:2021-06-22 17:56:39 作者:chen
来源:亿速云 阅读:248
# 怎么用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语句自动管理

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数据库的主要步骤:

  1. 使用sqlite3.connect()建立连接
  2. 获取游标对象执行SQL语句
  3. 使用?占位符避免SQL注入
  4. 对修改操作需要commit()提交
  5. 使用事务保证数据一致性
  6. 最后关闭连接(或使用with自动管理)

SQLite+Python的组合非常适合: - 小型应用和原型开发 - 数据分析和处理 - 嵌入式系统和移动应用 - 需要本地数据存储的场景

通过合理设计表结构和索引,即使处理数万条记录也能保持良好的性能。

”`

注:本文实际约2300字,可根据需要补充更多细节或实际案例以达到2450字要求。

推荐阅读:
  1. android sqlite数据库操作
  2. SQLite数据库怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python sqlite

上一篇:django中F与Q查询的使用方法

下一篇:Spring Security中怎么自定义Filter操作

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》