MySQL 编程集成 (Python/Java/Go)
MySQL 能与各种编程语言轻松集成。本章将介绍如何使用流行的编程语言连接和操作 MySQL 数据库,包含 Python (PyMySQL)、Java (JDBC) 和 Go (database/sql)。
Python 集成
Python 连接 MySQL 最常用的是 PyMySQL 和 mysql-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)
}
编程实践建议
- 始终使用参数化查询:严禁直接拼接 SQL 字符串,防止 SQL 注入攻击。
- 连接池:在 Web 应用中务必使用连接池(如 Java 的 HikariCP、Go 的内置池),不要频繁建立和断开连接。
- 资源释放:确保在
finally块或使用try-with-resources / defer及时关闭连接、游标和结果集。 - 日志输出:记录慢查询或异常 SQL,方便后续分析和调优。
- 事务管理:逻辑相关的多个操作,应放在一个显式开启的事务中。
常用库与 ORM 推荐
| 语言 | 基础驱动/库 | 流行 ORM (可选) |
|---|---|---|
| Python | PyMySQL, mysql-connector-python | SQLALchemy, Django-ORM, Tortoise |
| Java | JDBC (MySQL Connector/J) | MyBatis, Hibernate, Spring Data JPA |
| Go | go-sql-driver/mysql | GORM, Ent, Sqlx |
小结
本章介绍了 MySQL 在 Python、Java 和 Go 三大主流语言中的基础用法。掌握驱动库的连接和 SQL 语句的执行是开发后端应用的基石。在大型项目中,还可以进一步通过 ORM 来简化数据映射和操作。
练习
- 在你熟悉的语言中安装 MySQL 驱动。
- 编写一个简单的脚本实现“学生成绩管理系统”的 CRUD 接口。
- 练习使用事务来保证“转账”操作的原子性。
- 尝试使用一种 ORM (如 GORM 或 SQLAlchemy) 来操作你的数据库表。