使用官方驱动 mysql-connector-python (推荐)
这是 Oracle 官方提供的驱动,与 MySQL 数据库的兼容性最好,更新也最及时。
第 1 步:安装驱动
你需要使用 pip 来安装这个库,打开你的终端或命令行工具,运行以下命令:
pip install mysql-connector-python
如果你使用的是 Python 3,并且你的系统同时有 Python 2 和 Python 3,你可能需要使用 pip3:
pip3 install mysql-connector-python
第 2 步:编写 Python 代码连接数据库
下面是一个完整的、分步的示例代码。
前提条件:
- 你已经安装并启动了 MySQL 数据库服务。
- 你有一个 MySQL 用户名和密码。
- 你知道要连接的数据库的地址(主机名/IP)和端口(默认是 3306)。
- 你可以创建一个用于测试的数据库。
示例代码:
import mysql.connector
from mysql.connector import Error
def connect_to_mysql():
"""连接到 MySQL 数据库并执行一些基本操作"""
connection = None # 初始化连接对象为 None
cursor = None # 初始化游标对象为 None
try:
# 1. 建立连接
# 请将下面的占位符替换为你自己的数据库信息
connection = mysql.connector.connect(
host='localhost', # 数据库主机地址
database='your_database', # 你要连接的数据库名
user='your_username', # 数据库用户名
password='your_password' # 数据库密码
)
if connection.is_connected():
db_info = connection.get_server_info()
print(f"成功连接到 MySQL 服务器,版本: {db_info}")
# 2. 创建一个游标对象
# 游标用于执行 SQL 查询
cursor = connection.cursor()
# 3. 执行一个简单的查询
cursor.execute("SELECT database();")
# 获取单条查询结果
record = cursor.fetchone()
print(f"你正在连接的数据库是: {record[0]}")
# --- 示例:创建表并插入数据 ---
print("\n--- 开始创建表并插入数据示例 ---")
# 创建表的 SQL 语句
create_table_query = """
CREATE TABLE IF NOT EXISTS employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
position VARCHAR(100),
salary DECIMAL(10, 2)
)
"""
cursor.execute(create_table_query)
print("表 'employees' 创建成功或已存在。")
# 插入数据的 SQL 语句
insert_query = "INSERT INTO employees (name, position, salary) VALUES (%s, %s, %s)"
employee_data = ('张三', '软件工程师', 12000.00)
cursor.execute(insert_query, employee_data)
# 提交事务,这样新增的数据才会真正保存到数据库
connection.commit()
print(f"成功插入一条记录: {cursor.lastrowid}")
# --- 示例:查询数据 ---
print("\n--- 开始查询数据示例 ---")
cursor.execute("SELECT id, name, position, salary FROM employees")
# 获取所有查询结果
results = cursor.fetchall()
print("当前员工列表:")
for row in results:
print(f"ID: {row[0]}, 姓名: {row[1]}, 职位: {row[2]}, 薪资: {row[3]}")
except Error as e:
# 捕获并打印连接或查询过程中发生的错误
print(f"连接或操作 MySQL 时发生错误: {e}")
finally:
# 4. 关闭游标和连接
# 这是非常重要的步骤,可以释放资源
if connection.is_connected() and cursor:
cursor.close()
connection.close()
print("\nMySQL 连接已关闭。")
# 调用函数
if __name__ == "__main__":
connect_to_mysql()
代码解析
import: 导入了mysql.connector和Error。mysql.connector.connect(...): 这是建立连接的核心函数。host: 数据库服务器的地址,本地通常是'localhost'。database: 你想操作的数据库的名称。user: 你的 MySQL 用户名。password: 你的 MySQL 密码。
connection.is_connected(): 检查连接是否成功建立。connection.cursor(): 创建一个游标对象,游标就像一个指针,它让你能够执行 SQL 命令并获取结果。cursor.execute(sql_query): 执行一条 SQL 语句。- 注意安全: 在插入数据时,我们使用了
cursor.execute(sql, data_tuple)的形式,而不是用字符串拼接(如f"INSERT ... VALUES('{name}', ...)"),这种“参数化查询”的方式可以防止 SQL 注入攻击,是必须遵守的最佳实践。
- 注意安全: 在插入数据时,我们使用了
cursor.fetchone()/fetchall()/fetchmany(size): 获取查询结果。fetchone(): 获取下一条结果。fetchall(): 获取所有结果。fetchmany(): 获取指定数量的结果。
connection.commit(): 非常重要! 在执行INSERT,UPDATE,DELETE等修改数据的操作后,必须调用此方法来提交事务,否则更改不会被保存到数据库。try...except...finally结构:try: 尝试执行连接和数据库操作。except: 如果发生错误(比如密码错误、数据库未启动),捕获异常并打印错误信息。finally: 无论是否发生错误,这里的代码都会被执行,我们用它来确保游标和连接被正确关闭,这是防止资源泄漏的关键。
使用第三方库 PyMySQL
PyMySQL 也是一个非常流行的纯 Python MySQL 客户端库,它的使用方法与 mysql-connector-python 非常相似。
第 1 步:安装 PyMySQL
pip install PyMySQL
第 2 步:编写代码
PyMySQL 的 API 几乎和 mysql-connector-python 一样,所以你可以很轻松地在两者之间切换。
import pymysql
from pymysql import MySQLError
def connect_with_pymysql():
"""使用 PyMySQL 连接 MySQL 数据库"""
connection = None
cursor = None
try:
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database',
cursorclass=pymysql.cursors.DictCursor # 以字典形式返回结果,更易读
)
with connection.cursor() as cursor:
# 执行查询
sql = "SELECT `id`, `name` FROM `employees`"
cursor.execute(sql)
# 获取所有结果
results = cursor.fetchall()
print("使用 PyMySQL 查询结果 (字典格式):")
for row in results:
print(f"ID: {row['id']}, 姓名: {row['name']}")
# 插入数据
insert_sql = "INSERT INTO `employees` (`name`, `position`, `salary`) VALUES (%s, %s, %s)"
cursor.execute(insert_sql, ('李四', '产品经理', 15000.00))
connection.commit() # 提交事务
print(f"成功插入记录,ID: {cursor.lastrowid}")
except MySQLError as e:
print(f"PyMySQL 连接或操作错误: {e}")
finally:
if connection:
connection.close()
print("\nPyMySQL 连接已关闭。")
# 调用函数
if __name__ == "__main__":
connect_with_pymysql()
如何选择?
| 特性 | mysql-connector-python (官方) |
PyMySQL (第三方) |
|---|---|---|
| 开发者 | Oracle (MySQL 官方) | 社区驱动 |
| 实现语言 | C 和 Python | 纯 Python |
| 性能 | 通常更高,因为部分代码是 C 实现的 | 纯 Python,性能略低,但通常足够 |
| 安装 | pip install mysql-connector-python |
pip install PyMySQL |
| 兼容性 | 与 MySQL 版本兼容性最好 | 兼容性好,广泛使用 |
| 推荐 | 首选,特别是对于生产环境 | 非常好的替代品,易于使用和部署 |
对于新项目,强烈推荐使用官方的 mysql-connector-python,如果你正在维护一个旧项目或者有特定的依赖要求,PyMySQL 也是一个可靠的选择。
希望这个详细的指南能帮助你顺利地在 Python 中连接 MySQL 数据库!
