跳到主要内容

MySQL 编程集成 (Python/Java/Go)

MySQL 能与各种编程语言轻松集成。本章将介绍如何使用流行的编程语言连接和操作 MySQL 数据库,包含 Python (PyMySQL)Java (JDBC)Go (database/sql)

Python 集成

Python 连接 MySQL 最常用的是 PyMySQLmysql-connector-python(官方)。

1. 安装 PyMySQL

pip install pymysql

2. 基本连接与查询

import pymysql

# 1. 建立连接
connection = pymysql.connect(
host='localhost',
user='root',
password='your_password',
database='mydb',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor # 返回结果为字典
)

try:
with connection.cursor() as cursor:
# 2. 执行查询
sql = "SELECT id, username, email FROM users WHERE id = %s"
cursor.execute(sql, (1,)) # 使用参数化查询防止 SQL 注入

# 3. 获取单行
result = cursor.fetchone()
print(f"用户: {result['username']}, 邮箱: {result['email']}")

# 4. 执行更新并提交
update_sql = "UPDATE users SET age = %s WHERE id = %s"
cursor.execute(update_sql, (25, 1))
connection.commit()

except Exception as e:
print(f"发生错误: {e}")
connection.rollback()
finally:
# 5. 关闭连接
connection.close()

Java 集成 (JDBC)

Java 通过 JDBC (Java Database Connectivity) 连接 MySQL。

1. 引入 Maven 依赖

<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
</dependency>

2. 基本连接代码

import java.sql.*;

public class MySQLExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "your_password";

// 使用 try-with-resources 自动释放资源
try (Connection conn = DriverManager.getConnection(url, user, password)) {
// 1. 创建 PreparedStatement (防止 SQL 注入)
String sql = "SELECT username, email FROM users WHERE id = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, 1);

// 2. 执行查询并处理结果集
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
System.out.println("用户: " + rs.getString("username"));
System.out.println("邮箱: " + rs.getString("email"));
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

Go 语言集成

Go 语言标准库 database/sql 配合 MySQL 驱动 go-sql-driver/mysql 使用。

1. 安装驱动

go get -u github.com/go-sql-driver/mysql

2. 基本操作代码

package main

import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql" // 匿名导入驱动
"log"
)

func main() {
// 1. 连接 DSN (Data Source Name)
dsn := "root:your_password@tcp(127.0.0.1:3306)/mydb?charset=utf8mb4&parseTime=True"
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal(err)
}
defer db.Close()

// 2. 测试连接
if err := db.Ping(); err != nil {
log.Fatal(err)
}

// 3. 查询单条记录
var username, email string
err = db.QueryRow("SELECT username, email FROM users WHERE id = ?", 1).Scan(&username, &email)
if err != nil {
log.Fatal(err)
}
fmt.Printf("用户: %s, 邮箱: %s\n", username, email)

// 4. 执行更新
res, err := db.Exec("UPDATE users SET age = ? WHERE id = ?", 30, 1)
if err != nil {
log.Fatal(err)
}
affected, _ := res.RowsAffected()
fmt.Printf("受到影响的行数: %d\n", affected)
}

编程实践建议

  1. 始终使用参数化查询:严禁直接拼接 SQL 字符串,防止 SQL 注入攻击
  2. 连接池:在 Web 应用中务必使用连接池(如 Java 的 HikariCP、Go 的内置池),不要频繁建立和断开连接。
  3. 资源释放:确保在 finally 块或使用 try-with-resources / defer 及时关闭连接、游标和结果集。
  4. 日志输出:记录慢查询或异常 SQL,方便后续分析和调优。
  5. 事务管理:逻辑相关的多个操作,应放在一个显式开启的事务中。

常用库与 ORM 推荐

语言基础驱动/库流行 ORM (可选)
PythonPyMySQL, mysql-connector-pythonSQLALchemy, Django-ORM, Tortoise
JavaJDBC (MySQL Connector/J)MyBatis, Hibernate, Spring Data JPA
Gogo-sql-driver/mysqlGORM, Ent, Sqlx

小结

本章介绍了 MySQL 在 Python、Java 和 Go 三大主流语言中的基础用法。掌握驱动库的连接和 SQL 语句的执行是开发后端应用的基石。在大型项目中,还可以进一步通过 ORM 来简化数据映射和操作。

练习

  1. 在你熟悉的语言中安装 MySQL 驱动。
  2. 编写一个简单的脚本实现“学生成绩管理系统”的 CRUD 接口。
  3. 练习使用事务来保证“转账”操作的原子性。
  4. 尝试使用一种 ORM (如 GORM 或 SQLAlchemy) 来操作你的数据库表。