python连接sqlite3简单用法完整例子

Written by

in

文章目录
  • 在 Python 中使用 sqlite3.connect() 方法连接到 SQLite 数据库。如果数据库文件不存在,会自动创建。 import sqlite3 # 连接到数据库文件(如果不存在则自动创建) conn = sqlite3.connect(‘example.db’) 解释: connect('example.db'):创建或打开名为 example.db 的数据库文件。 返回的 conn 是数据库连接对象,后续操作都需要通过它进行。
  • 通过连接对象创建游标(Cursor),用于执行 SQL 语句。 cursor = conn.cursor() 解释: 游标对象 cursor 用于执行 create table、insert into、select 等 SQL 语句。
  • 使用 create table 语句创建表,推荐使用 if not exists 避免重复创建。 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 users:如果表 users 不存在则创建。 id integer primary key autoincrement:id 是主键,自动递增。 name text not null:name 字段为文本类型且不能为空。 email text unique:email 字段必须唯一。 conn.commit():提交事务(必须执行,否则表不会被创建)。
  • 使用 insert into 插入数据,推荐使用参数化查询防止 SQL 注入。 # 单条插入 cursor.execute(“INSERT INTO users (name, age, email) VALUES (?, ?, ?)”, (‘Alice’, 25, ‘alice@example.com’)) # 多条插入 users_data = [ (‘Bob’, 30, ‘bob@example.com’), (‘Charlie’, 35, ‘charlie@example.com’) ] cursor.executemany(“INSERT INTO users (name, age, email) VALUES (?, ?, ?)”, users_data) conn.commit() 解释: values (?, ?, ?):? 是占位符,Python 会自动替换参数(防止 SQL 注入)。 executemany 可一次插入多条数据。 conn.commit() 提交事务(插入操作必须提交)。
  • 使用 select 查询数据,结果通过 fetchone() 或 fetchall() 获取。 # 查询所有用户 cursor.execute(“SELECT * FROM users”) rows = cursor.fetchall() for row in rows: print(row) # 条件查询 cursor.execute(“SELECT name, age FROM users WHERE age > ?”, (30,)) result = cursor.fetchone() print(result) 解释: select * from users:查询 users 表的所有字段。 fetchall():获取所有查询结果(返回列表)。 fetchone():获取单条结果(返回元组)。 where age > ?:筛选 age 大于指定值的记录。
  • 使用 update 修改已有数据。 cursor.execute(“UPDATE users SET age = ? WHERE name = ?”, (26, ‘Alice’)) conn.commit() 解释: set age = ?:将 age 字段更新为新值。 where name = ?:仅更新 name 为 'Alice' 的记录。 conn.commit() 提交事务。
  • 使用 delete from 删除数据。 cursor.execute(“DELETE FROM users WHERE name = ‘Bob'”) conn.commit() 解释: delete from users:删除 users 表中的记录。 where name = 'Bob':仅删除 name 为 'Bob' 的记录。 conn.commit() 提交事务。
  • 索引可以加速查询,但会降低插入/更新速度。 cursor.execute(“CREATE INDEX idx_name ON users (name)”) conn.commit() 解释: create index idx_name on users (name):为 users 表的 name 字段创建索引。
  • SQLite 支持事务(begin, commit, rollback),确保操作的原子性。 try: # 开始事务 conn.execute(“BEGIN”) # 执行多条操作 cursor.execute(“INSERT INTO users (name, age) VALUES (?, ?)”, (‘David’, 28)) cursor.execute(“UPDATE users SET age = ? WHERE name = ?”, (29, ‘David’)) # 提交事务 conn.commit() except Exception as e: print(“事务失败,回滚:”, e) conn.rollback() # 回滚事务 解释: begin:显式开始事务(默认情况下,每条语句都是独立事务)。 conn.commit():提交事务(所有操作生效)。 conn.rollback():回滚事务(撤销所有未提交的操作)。
  • 操作完成后,关闭游标和数据库连接。 cursor.close() conn.close() 解释: 关闭游标和连接释放资源,避免内存泄漏。
  • import sqlite3 # 1. 连接数据库 conn = sqlite3.connect(‘example.db’) cursor = conn.cursor() # 2. 创建表 cursor.execute(”’ CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER, email TEXT UNIQUE ) ”’) conn.commit() # 3. 插入数据 cursor.execute(“INSERT INTO users (name, age, email) VALUES (?, ?, ?)”, (‘Alice’, 25, ‘alice@example.com’)) conn.commit() # 4. 查询数据 cursor.execute(“SELECT * FROM users”) rows = cursor.fetchall() for row in rows: print(row) # 5. 更新数据 cursor.execute(“UPDATE users SET age = ? WHERE name = ?”, (26, ‘Alice’)) conn.commit() # 6. 删除数据 cursor.execute(“DELETE FROM users WHERE name = ‘Alice'”) conn.commit() # 7. 关闭连接 cursor.close() conn.close()
  • 忘记提交事务 错误:插入/更新/删除后未调用 conn.commit()。 修正:每次修改数据后必须调用 conn.commit()。 SQL 注入风险 错误:直接拼接 SQL 语句(如 f"INSERT INTO users VALUES ({name})")。 修正:使用参数化查询(如 VALUES (?, ?))。 字段名与保留字冲突 错误:使用 order, group 等保留字作为字段名。 修正:避免使用保留字,或用引号包裹字段名(如 "order")。 未关闭连接 错误:程序结束时未关闭 cursor 和 conn。 修正:使用 with 上下文管理器自动关闭资源: with sqlite3.connect(‘example.db’) as conn: cursor = conn.cursor() # 执行操作…
  • 到此这篇关于python连接sqlite3简单用法的文章就介绍到这了,更多相关python连接sqlite3用法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】 Windows平台Python连接sqlite3数据库的方法分析
  • 目录
    • 1. 连接到数据库
    • 2. 创建游标对象
    • 3. 创建表
    • 4. 插入数据
    • 5. 查询数据
    • 6. 更新数据
    • 7. 删除数据
    • 8. 创建索引(可选)
    • 9. 事务处理
    • 10. 关闭连接
    • 完整示例代码
    • 常见错误与避坑指南
    • 总结

    在 Python 中使用 sqlite3.connect() 方法连接到 SQLite 数据库。如果数据库文件不存在,会自动创建。

    import sqlite3
     
    # 连接到数据库文件(如果不存在则自动创建)
    conn = sqlite3.connect('example.db')
    • 解释
      • connect('example.db'):创建或打开名为 example.db 的数据库文件。
      • 返回的 conn 是数据库连接对象,后续操作都需要通过它进行。

    通过连接对象创建游标(Cursor),用于执行 SQL 语句。

    cursor = conn.cursor()
    • 解释
      • 游标对象 cursor 用于执行 create tableinsert intoselect 等 SQL 语句。

    使用 create table 语句创建表,推荐使用 if not exists 避免重复创建。

    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 users:如果表 users 不存在则创建。
      • id integer primary key autoincrementid 是主键,自动递增。
      • name text not nullname 字段为文本类型且不能为空。
      • email text uniqueemail 字段必须唯一。
      • conn.commit():提交事务(必须执行,否则表不会被创建)。

    使用 insert into 插入数据,推荐使用参数化查询防止 SQL 注入。

    # 单条插入
    cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", 
                   ('Alice', 25, 'alice@example.com'))
     
    # 多条插入
    users_data = [
        ('Bob', 30, 'bob@example.com'),
        ('Charlie', 35, 'charlie@example.com')
    ]
    cursor.executemany("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", users_data)
     
    conn.commit()
    • 解释
      • values (?, ?, ?)? 是占位符,Python 会自动替换参数(防止 SQL 注入)。
      • executemany 可一次插入多条数据。
      • conn.commit() 提交事务(插入操作必须提交)。

    使用 select 查询数据,结果通过 fetchone()fetchall() 获取。

    # 查询所有用户
    cursor.execute("SELECT * FROM users")
    rows = cursor.fetchall()
    for row in rows:
        print(row)
     
    # 条件查询
    cursor.execute("SELECT name, age FROM users WHERE age > ?", (30,))
    result = cursor.fetchone()
    print(result)
    • 解释
      • select * from users:查询 users 表的所有字段。
      • fetchall():获取所有查询结果(返回列表)。
      • fetchone():获取单条结果(返回元组)。
      • where age > ?:筛选 age 大于指定值的记录。

    使用 update 修改已有数据。

    cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, 'Alice'))
    conn.commit()
    • 解释
      • set age = ?:将 age 字段更新为新值。
      • where name = ?:仅更新 name 为 'Alice' 的记录。
      • conn.commit() 提交事务。

    使用 delete from 删除数据。

    cursor.execute("DELETE FROM users WHERE name = 'Bob'")
    conn.commit()
    • 解释
      • delete from users:删除 users 表中的记录。
      • where name = 'Bob':仅删除 name 为 'Bob' 的记录。
      • conn.commit() 提交事务。

    索引可以加速查询,但会降低插入/更新速度。

    cursor.execute("CREATE INDEX idx_name ON users (name)")
    conn.commit()
    • 解释
      • create index idx_name on users (name):为 users 表的 name 字段创建索引。

    SQLite 支持事务(begin, commit, rollback),确保操作的原子性。

    try:
        # 开始事务
        conn.execute("BEGIN")
        
        # 执行多条操作
        cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('David', 28))
        cursor.execute("UPDATE users SET age = ? WHERE name = ?", (29, 'David'))
        
        # 提交事务
        conn.commit()
    except Exception as e:
        print("事务失败,回滚:", e)
        conn.rollback()  # 回滚事务
    • 解释
      • begin:显式开始事务(默认情况下,每条语句都是独立事务)。
      • conn.commit():提交事务(所有操作生效)。
      • conn.rollback():回滚事务(撤销所有未提交的操作)。

    操作完成后,关闭游标和数据库连接。

    cursor.close()
    conn.close()
    • 解释
      • 关闭游标和连接释放资源,避免内存泄漏。

    import sqlite3
     
    # 1. 连接数据库
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
     
    # 2. 创建表
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            age INTEGER,
            email TEXT UNIQUE
        )
    ''')
    conn.commit()
     
    # 3. 插入数据
    cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", 
                   ('Alice', 25, 'alice@example.com'))
    conn.commit()
     
    # 4. 查询数据
    cursor.execute("SELECT * FROM users")
    rows = cursor.fetchall()
    for row in rows:
        print(row)
     
    # 5. 更新数据
    cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, 'Alice'))
    conn.commit()
     
    # 6. 删除数据
    cursor.execute("DELETE FROM users WHERE name = 'Alice'")
    conn.commit()
     
    # 7. 关闭连接
    cursor.close()
    conn.close()

    1. 忘记提交事务

      • 错误:插入/更新/删除后未调用 conn.commit()
      • 修正:每次修改数据后必须调用 conn.commit()
    2. SQL 注入风险

      • 错误:直接拼接 SQL 语句(如 f"INSERT INTO users VALUES ({name})")。
      • 修正:使用参数化查询(如 VALUES (?, ?))。
    3. 字段名与保留字冲突

      • 错误:使用 ordergroup 等保留字作为字段名。
      • 修正:避免使用保留字,或用引号包裹字段名(如 "order")。
    4. 未关闭连接

      • 错误:程序结束时未关闭 cursor 和 conn
      • 修正:使用 with 上下文管理器自动关闭资源:
        with sqlite3.connect('example.db') as conn:
            cursor = conn.cursor()
            # 执行操作...

    到此这篇关于python连接sqlite3简单用法的文章就介绍到这了,更多相关python连接sqlite3用法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
    • Windows平台Python连接sqlite3数据库的方法分析

    站内搜索