在 Python 中使用 sqlite3.connect()
方法连接到 SQLite 数据库。如果数据库文件不存在,会自动创建。
python
import sqlite3
# 连接到数据库文件(如果不存在则自动创建)
conn = sqlite3.connect('example.db')
connect('example.db')
:创建或打开名为 example.db
的数据库文件。conn
是数据库连接对象,后续操作都需要通过它进行。通过连接对象创建游标(Cursor),用于执行 SQL 语句。
python
cursor = conn.cursor()
cursor
用于执行 create table
、insert into
、select
等 SQL 语句。使用 create table
语句创建表,推荐使用 if not exists
避免重复创建。
python
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 注入。
python
# 单条插入
cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)",
('Alice', 25, '[email protected]'))
# 多条插入
users_data = [
('Bob', 30, '[email protected]'),
('Charlie', 35, '[email protected]')
]
cursor.executemany("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", users_data)
conn.commit()
values (?, ?, ?)
:?
是占位符,Python 会自动替换参数(防止 SQL 注入)。executemany
可一次插入多条数据。conn.commit()
提交事务(插入操作必须提交)。使用 select
查询数据,结果通过 fetchone()
或 fetchall()
获取。
python
# 查询所有用户
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
修改已有数据。
python
cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, 'Alice'))
conn.commit()
set age = ?
:将 age
字段更新为新值。where name = ?
:仅更新 name
为 'Alice'
的记录。conn.commit()
提交事务。使用 delete from
删除数据。
python
cursor.execute("DELETE FROM users WHERE name = 'Bob'")
conn.commit()
delete from users
:删除 users
表中的记录。where name = 'Bob'
:仅删除 name
为 'Bob'
的记录。conn.commit()
提交事务。索引可以加速查询,但会降低插入/更新速度。
python
cursor.execute("CREATE INDEX idx_name ON users (name)")
conn.commit()
create index idx_name on users (name)
:为 users
表的 name
字段创建索引。SQLite 支持事务(begin
, commit
, rollback
),确保操作的原子性。
python
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()
:回滚事务(撤销所有未提交的操作)。操作完成后,关闭游标和数据库连接。
python
cursor.close()
conn.close()
python
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, '[email protected]'))
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 注入风险
f"INSERT INTO users VALUES ({name})"
)。VALUES (?, ?)
)。字段名与保留字冲突
order
, group
等保留字作为字段名。"order"
)。未关闭连接
cursor
和 conn
。with
上下文管理器自动关闭资源: python with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
# 执行操作...