核心步骤
使用 sqlite3 创建表通常遵循以下四个步骤:

- 导入模块:你需要导入 Python 内置的
sqlite3模块。 - 连接数据库:使用
sqlite3.connect()函数连接到一个 SQLite 数据库文件,如果文件不存在,它会自动创建一个新的。 - 创建游标:通过连接对象创建一个 游标,游标是一个指针,用于执行 SQL 命令并获取结果。
- 执行 SQL 语句:使用游标的
execute()方法来执行CREATE TABLESQL 命令。 - 提交更改:在执行了修改数据库的操作(如创建表、插入数据等)后,必须调用连接对象的
commit()方法来将更改保存到数据库文件中。 - 关闭连接:操作完成后,关闭游标和连接,以释放资源。
基本示例代码
下面是一个完整的、最简单的例子,创建一个名为 users 的表。
import sqlite3
# 1. 连接到数据库 (如果数据库不存在,则会自动创建)
# 'my_database.db' 是数据库文件的名称
conn = sqlite3.connect('my_database.db')
# 2. 创建一个游标对象
cursor = conn.cursor()
# 3. 定义创建表的 SQL 语句
# 使用 f-string 或三引号来定义多行 SQL 语句,可读性更好
create_table_query = """
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
age INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
"""
# 4. 执行 SQL 语句
cursor.execute(create_table_query)
# 5. 提交事务,将更改保存到数据库
conn.commit()
print("表 'users' 创建成功!")
# 6. 关闭游标和连接
cursor.close()
conn.close()
代码解释:
CREATE TABLE IF NOT EXISTS users (...):CREATE TABLE: 关键字,表示要创建一个新表。IF NOT EXISTS: 这是一个非常推荐使用的子句,它可以防止在脚本重复运行时因表已存在而导致的错误。users: 你要创建的表的名称。
id INTEGER PRIMARY KEY AUTOINCREMENT:- 定义了一个名为
id的列。 INTEGER: 数据类型为整数。PRIMARY KEY: 主键,用于唯一标识表中的每一行记录。AUTOINCREMENT: 自动递增,当你插入新记录时,如果未指定id,SQLite 会自动为它分配一个比当前最大值大 1 的整数值。
- 定义了一个名为
name TEXT NOT NULL:TEXT: 数据类型为文本字符串。NOT NULL: 约束,表示该列不能为空。
email TEXT NOT NULL UNIQUE:UNIQUE: 约束,表示该列的值在表中必须是唯一的,不能有重复。
age INTEGER: 一个可选的整数列,用于存储年龄。created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP:TIMESTAMP: 数据类型,用于存储日期和时间。DEFAULT CURRENT_TIMESTAMP: 默认值,当插入新记录且未为此列提供值时,它会自动设置为当前的日期和时间。
最佳实践:使用 with 语句
手动管理 cursor.close() 和 conn.close() 有时会忘记,尤其是在程序出现异常时,推荐使用 with 语句(上下文管理器)来自动处理资源的释放。
sqlite3 的连接对象支持 with 语句,当 with 块执行完毕后,连接会自动关闭并提交(除非在块内发生了未捕获的异常)。

import sqlite3
# 使用 with 语句,连接会在块结束时自动关闭
with sqlite3.connect('my_database.db') as conn:
cursor = conn.cursor()
# 定义表的 SQL 语句
create_table_query = """
CREATE TABLE IF NOT EXISTS products (
product_id INTEGER PRIMARY KEY AUTOINCREMENT,
product_name TEXT NOT NULL,
price REAL NOT NULL CHECK(price > 0),
stock_quantity INTEGER DEFAULT 0
);
"""
# 执行 SQL 语句
cursor.execute(create_table_query)
# 提交事务 (在 with 块结束时也会自动提交)
conn.commit()
print("表 'products' 创建成功!")
# 连接在这里自动关闭
新知识点:
REAL: SQLite 中的浮点数类型。CHECK(price > 0): 这是一个 检查约束,它确保price列的值必须大于 0,否则插入操作会失败。
如何验证表是否创建成功?
你可以使用 SQLite 的命令行工具(sqlite3)来验证。
-
打开终端或命令提示符。
-
进入你的 Python 脚本所在的目录。
(图片来源网络,侵删) -
运行以下命令:
sqlite3 my_database.db
-
在 SQLite 提示符 (
>) 下,输入.tables命令来列出所有表:.tables
你应该能看到
users和products(如果你运行了两个示例)。 -
你还可以使用
.schema命令查看表的创建语句:.schema users
这会输出你之前执行的
CREATE TABLE语句。
| 步骤 | 代码/操作 | 说明 |
|---|---|---|
| 导入 | import sqlite3 |
加载 Python 的 SQLite3 模块。 |
| 连接 | conn = sqlite3.connect('file.db') |
连接或创建数据库文件,返回连接对象。 |
| 游标 | cursor = conn.cursor() |
从连接对象创建游标,用于执行 SQL。 |
| 执行 | cursor.execute("CREATE TABLE ...") |
使用游标执行 SQL 命令。 |
| 提交 | conn.commit() |
保存对数据库的更改(重要!)。 |
| 关闭 | cursor.close()conn.close() |
释放游标和连接资源。 |
核心要点:
- 始终使用
IF NOT EXISTS来避免重复创建表导致的错误。 - 为表和列选择有意义的名称,并遵循一致的命名规范(如
snake_case)。 - 合理使用数据类型和约束(如
PRIMARY KEY,NOT NULL,UNIQUE,CHECK)来保证数据的完整性和有效性。 - 优先使用
with语句 来管理数据库连接,使代码更简洁、安全。
