杰瑞科技汇

Python SQLite如何创建数据库?

SQLite 是一个基于文件的轻量级数据库,它的所有数据都存储在一个单独的 .db 文件中。

Python SQLite如何创建数据库?-图1
(图片来源网络,侵删)

下面我将分步为你讲解如何创建数据库、表,并进行基本的操作。

第一步:导入 sqlite3 模块

在你的 Python 脚本中导入这个模块。

import sqlite3

第二步:连接到数据库

使用 sqlite3.connect() 函数来连接到一个数据库,这个函数会做两件事之一:

  1. 如果指定的数据库文件不存在,它会自动创建这个文件,并返回一个连接对象。
  2. 如果数据库文件已存在,它会直接打开该文件并返回连接对象。
# 数据库文件名
db_file = 'my_database.db'
# 连接到数据库,如果不存在则创建
# conn 是一个连接对象
conn = sqlite3.connect(db_file)
print(f"成功连接到数据库 {db_file}")
# 完成操作后,记得关闭连接
conn.close()

运行这段代码后,你会在你的项目目录下看到一个名为 my_database.db 的新文件,这就是你的 SQLite 数据库文件。

Python SQLite如何创建数据库?-图2
(图片来源网络,侵删)

完整示例:创建数据库、表并插入数据

下面是一个更完整的、包含了创建表、插入数据、查询数据和关闭连接的完整流程,这是最常见的使用模式。

import sqlite3
import os
# --- 1. 连接到数据库 ---
# 如果数据库文件不存在,它会被自动创建
db_file = 'company.db'
conn = sqlite3.connect(db_file)
print(f"成功连接到数据库 {db_file}")
# --- 2. 创建一个游标对象 ---
# 游标用于执行 SQL 语句
cursor = conn.cursor()
# --- 3. 创建表 ---
# 使用游标的 execute() 方法来执行 SQL 语句
# 如果表已存在,DROP TABLE 会删除它,在开发阶段很有用。
# 在生产环境中,需要更谨慎地处理。
try:
    cursor.execute('''
    CREATE TABLE employees (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        department TEXT,
        position TEXT,
        salary REAL
    )
    ''')
    print("表 'employees' 创建成功")
except sqlite3.OperationalError as e:
    print(f"表已存在或发生错误: {e}")
# --- 4. 向表中插入数据 ---
# 使用参数化查询来防止 SQL 注入
employees_data = [
    (1, '张三', '技术部', '软件工程师', 12000.00),
    (2, '李四', '市场部', '市场经理', 15000.00),
    (3, '王五', '技术部', '高级工程师', 18000.00)
]
# executemany() 可以高效地执行多条相同的 INSERT 语句
cursor.executemany("INSERT INTO employees (id, name, department, position, salary) VALUES (?, ?, ?, ?, ?)", employees_data)
print(f"成功插入 {cursor.rowcount} 条数据")
# --- 5. 提交事务 ---
# 在 SQLite 中,修改操作(INSERT, UPDATE, DELETE)需要手动提交
# 否则更改不会被保存到数据库文件中
conn.commit()
print("事务已提交")
# --- 6. 查询数据 ---
print("\n--- 查询所有员工信息 ---")
cursor.execute("SELECT * FROM employees")
# fetchall() 获取所有查询结果
rows = cursor.fetchall()
# 打印表头
print(f"{'ID':<5}{'姓名':<10}{'部门':<10}{'职位':<15}{'薪资':>10}")
print("-" * 50)
# 打印每一行数据
for row in rows:
    print(f"{row[0]:<5}{row[1]:<10}{row[2]:<10}{row[3]:<15}{row[4]:>10.2f}")
# --- 7. 更新数据 ---
print("\n--- 将张三的薪资更新为 13000 ---")
cursor.execute("UPDATE employees SET salary = ? WHERE name = ?", (13000, '张三'))
conn.commit()
print("更新成功")
# 查询更新后的结果
cursor.execute("SELECT name, salary FROM employees WHERE name = '张三'")
updated_employee = cursor.fetchone()
print(f"更新后: {updated_employee[0]} 的薪资是 {updated_employee[1]}")
# --- 8. 关闭连接 ---
# 关闭游标和连接是一个好习惯
cursor.close()
conn.close()
print("\n数据库连接已关闭")

代码关键点解释

  1. conn = sqlite3.connect('database.db'): 连接到数据库,conn 是连接对象。
  2. cursor = conn.cursor(): 创建一个游标对象,所有的 SQL 命令都通过这个游标来执行。
  3. cursor.execute(sql_command): 执行一条 SQL 命令。
  4. cursor.executemany(sql_command, data_list): 执行一条 SQL 命令多次,data_list 是一个包含多组参数的列表,非常适合批量插入数据。
  5. conn.commit(): 非常重要! 在执行了 INSERT, UPDATE, DELETE 等修改数据的操作后,必须调用此方法来提交事务,否则更改不会持久化。
  6. cursor.fetchall(): 获取查询结果集中的所有行,返回一个由元组组成的列表。
  7. cursor.fetchone(): 获取查询结果集中的下一行,返回一个元组,如果没有更多数据,则返回 None
  8. cursor.close()conn.close(): 完成所有操作后,关闭游标和连接,释放资源。

使用 with 语句(推荐)

为了确保连接总是能被正确关闭(即使发生错误),强烈建议使用 with 语句。sqlite3 的连接对象支持上下文管理器协议。

import sqlite3
db_file = 'my_database_with.db'
# 使用 with 语句,连接会在代码块执行完毕后自动关闭
with sqlite3.connect(db_file) as conn:
    cursor = conn.cursor()
    # 创建表
    cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        username TEXT UNIQUE,
        email TEXT
    )
    ''')
    # 插入数据
    try:
        cursor.execute("INSERT INTO users (username, email) VALUES (?, ?)", ('charlie', 'charlie@example.com'))
        conn.commit() # 修改操作仍然需要手动提交
        print("数据插入成功")
    except sqlite3.IntegrityError:
        print("用户名 'charlie' 已存在,跳过插入")
    # 查询数据
    cursor.execute("SELECT * FROM users")
    users = cursor.fetchall()
    for user in users:
        print(user)
print("数据库连接已自动关闭")
  • 创建数据库: sqlite3.connect('your_database.db') 会自动处理创建。
  • 创建表: 使用 cursor.execute("CREATE TABLE ...")
  • 操作数据: 使用 cursor.execute()cursor.executemany()
  • 保存修改: 别忘了 conn.commit()
  • 安全查询: 始终使用 作为占位符来传递参数,可以有效防止 SQL 注入攻击。
  • 关闭资源: 推荐使用 with 语句来管理数据库连接,确保其能被正确关闭。
Python SQLite如何创建数据库?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇