Python 提供了多种方式来连接和操作不同类型的数据库。下面分别介绍如何连接 SQLite 和 MySQL 数据库。
连接 SQLite 数据库
SQLite 是一种嵌入式数据库,它不需要单独的服务器进程,使用起来非常方便,适合小型项目和学习使用。Python 内置了 sqlite3
模块,无需额外安装即可使用。
以下是连接 SQLite 数据库的基本步骤:
import sqlite3
# 连接到 SQLite 数据库
# 如果数据库文件不存在,会自动创建
conn = sqlite3.connect('example.db')
# 创建一个游标对象,用于执行 SQL 语句
cursor = conn.cursor()
# 执行 SQL 语句创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER
)
''')
# 提交事务
conn.commit()
# 关闭游标和连接
cursor.close()
conn.close()
连接 MySQL 数据库
MySQL 是一种广泛使用的开源关系型数据库,需要单独安装服务器和客户端。Python 可以使用 mysql-connector-python
或 pymysql
等库来连接 MySQL 数据库。
以下是使用 pymysql
连接 MySQL 数据库的基本步骤:
import pymysql
# 连接到 MySQL 数据库
DB_CONFIG = {
"host":"localhost",
"user":"your_username",
"password":"your_password",
"database":"your_database",
"port" : 3306
}
# 创建数据库连接
conn = pymysql.connect(**DB_CONFIG)
# 创建游标对象
cursor = conn.cursor()
# 执行 SQL 语句创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
age INT
)
''')
# 提交事务
conn.commit()
# 关闭游标和连接
cursor.close()
conn.close()
SQLite增删改查完整示例
import sqlite3
# 1. 连接数据库
conn = sqlite3.connect('school.db')
cursor = conn.cursor()
# 2. 创建表
cursor.execute('''CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER,
gender TEXT)''')
conn.commit()
# 3. 插入数据(增)
# 单条插入
cursor.execute("INSERT INTO students (name, age, gender) VALUES (?, ?, ?)",
('张三', 20, '男'))
# 批量插入
students = [('李四', 22, '女'), ('王五', 21, '男'), ('赵六', 19, '女')]
cursor.executemany("INSERT INTO students (name, age, gender) VALUES (?, ?, ?)", students)
conn.commit()
# 4. 查询数据(查)
# 查询所有
cursor.execute("SELECT * FROM students")
print("所有学生:")
for row in cursor.fetchall():
print(row)
# 条件查询
cursor.execute("SELECT * FROM students WHERE age > ?", (20,))
print("\n年龄大于20的学生:")
for row in cursor.fetchall():
print(row)
# 5. 更新数据(改)
cursor.execute("UPDATE students SET age = ? WHERE name = ?", (23, '李四'))
conn.commit()
print("\n更新后的李四信息:")
cursor.execute("SELECT * FROM students WHERE name = '李四'")
print(cursor.fetchone())
# 6. 删除数据(删)
cursor.execute("DELETE FROM students WHERE name = ?", ('赵六',))
conn.commit()
print("\n删除赵六后的学生列表:")
cursor.execute("SELECT * FROM students")
for row in cursor.fetchall():
print(row)
# 7. 关闭连接
conn.close()
关键操作说明
-
参数化查询:
-
使用
?
作为占位符(SQLite) -
MySQL使用
%s
作为占位符 -
防止SQL注入攻击
-
-
事务控制:
-
conn.commit()
:提交更改 -
conn.rollback()
:回滚操作
-
-
结果获取:
-
fetchall()
:获取所有结果 -
fetchone()
:获取单条记录 -
fetchmany(size)
:获取指定数量记录
-
-
数据类型映射:
Python类型 SQLite类型 MySQL类型 None NULL NULL int INTEGER INT float REAL FLOAT str TEXT VARCHAR bytes BLOB BLOB
SQLite vs MySQL
特性 | SQLite | MySQL |
---|---|---|
存储方式 | 单文件 | 独立服务 |
适用场景 | 移动端/小型应用 | 中大型Web应用 |
并发能力 | 弱(文件锁) | 强(行级锁) |
安装需求 | Python内置 | 需单独安装服务器 |
连接方式 | 直接连接文件 | TCP/IP连接 |
性能 | 简单操作快 | 复杂查询/高并发优 |
数据类型 | 动态类型 | 严格类型 |
通用步骤:
重要原则:
-
始终使用参数化查询
-
操作后及时提交事务
-
使用
try-finally
确保关闭连接
以上就是 Python 操作 SQLite 和 MySQL 数据库的基本方法和操作示例。希望对你有所帮助!