首页 论坛 置顶 Python中的SQLite3模块

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 作者
    帖子
  • #25130

    sqlite3 Python模块指南

    SQLite3是一个用C语言编写的Python模块,允许与轻量级的本地SQL数据库进行交互。它是Python标准库的一部分,无需安装。本文假设您了解基本的Python和SQL。


    设置

    开始之前:

    import sqlite3 as sql

    然后建立连接和游标:

    connection = sql.connect("my_database.db")
    cursor = connection.cursor()

    connection 将你的 Python 程序与数据库连接起来。
    cursor 发送 SQL 命令并获取结果。


    SQL 查询类型

    你将使用两种主要类型的 SQL 命令:

    DDL(数据定义语言): CREATEDROPALTER
    DML(数据操作语言): INSERTSELECTUPDATEDELETE


    DDL 示例:创建和删除表

    connection = sql.connect("my_database.db")
    cursor = connection.cursor()
    
    cursor.execute("""
    如果不存在则创建用户表 (
        id 整数 主键 自增,
        name 文本 不为空,
        age 整数
    );
    """)
    
    # 示例 删除
    cursor.execute("如果存在则删除旧用户表;")
    
    connection.commit()
    connection.close()

    所有的 DDL 命令 必须 后跟 connection.commit(),否则您的更改将不会被保存。


    DML 示例:插入和选择数据

    插入示例

    connection = sql.connect("my_database.db")
    cursor = connection.cursor()
    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 25))
    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Bob", 30))
    connection.commit()
    connection.close()
    

    选择示例

    connection = sql.connect("my_database.db")
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM users")
    data = cursor.fetchall()
    connection.close()
    print(data)
    

    所有的 SELECT 命令 必须 后跟适当的获取命令。

    使用以下方法来检索数据:

    方法 返回值
    fetchone() 作为元组返回的一行
    fetchmany(n) 作为元组列表返回的下一 n
    fetchall() 作为元组列表返回的所有行

    示例:

    cursor.execute("SELECT * FROM users")
    rows = cursor.fetchall()
    for row in rows:
        print(row)
    

    输出:

    [(1, 'Alice', 25), (2, 'Bob', 30)]

    下一步

    现在您已经了解了 sqlite3 模块的基础知识以及如何与数据库进行交互,以下是一些我们可能还需要讨论的重要主题:

    使用 with 语句

    使用 with 可以确保您的数据库连接在发生错误时自动关闭:

    import sqlite3 as sql
    
    with sql.connect("my_database.db") as connection:
        cursor = connection.cursor()
        cursor.execute("SELECT * FROM users")
        data = cursor.fetchall()
        print(data)

    基本错误处理

    将您的数据库操作包装在try-except块中,以捕获DatabaseError

    try:
        connection = sql.connect("my_database.db")
        cursor = connection.cursor()
    cursor.execute("从用户表中选择所有记录")
    data = cursor.fetchall()
    except sql.DatabaseError as e:
        print(f"发生数据库错误: {e}")
    finally:
        connection.close()
    异常 描述 sqlite3.DatabaseError 通用数据库错误 sqlite3.IntegrityError 约束违反(例如,唯一性、外键) sqlite3.OperationalError 操作问题(例如,缺少表、语法错误) sqlite3.ProgrammingError API误用(例如,参数错误) sqlite3.InterfaceError 与数据库接口相关的错误

    防止SQL注入

    始终使用参数化查询(带有?占位符)来安全地插入用户输入,避免SQL注入风险:

    name = "Alice"
    age = 25
    
    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", (name, age))

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 哎呀,回复话题必需登录。