更新时间:2026-08-31 GMT+08:00
通过Python、C或Golang连接RDS for MySQL实例
本文介绍如何通过Python、C或Golang连接RDS for MySQL实例。
代码中的参数说明
| 参数 | 说明 |
|---|---|
| <RDS_HOST> | 实例的连接地址。 获取方法如下:
|
| <RDS_PORT> | 实例的数据库端口。 获取方法如下:
|
| <RDS_USER> | 实例的账号名称,默认root。 获取方法如下:
|
| <RDS_PASSWORD> | 实例的账号所对应的密码。 |
| <RDS_DATABASE> | 连接的实例的数据库名称。 获取方法如下:
|
在运行代码前,请先安装PyMySQL。
- Python3安装命令:
pip3 install PyMySQL
- Python2安装命令:
pip install pymysql==0.9.3
Python3示例代码如下:
import pymysql
connection = pymysql.connect(host='<RDS_HOST>',
port=<RDS_PORT>,
user='<RDS_USER>',
password='<RDS_PASSWORD>',
database='<RDS_DATABASE>')
try:
with connection.cursor() as cursor:
sql = "SELECT * FROM `courses`"
cursor.execute(sql)
for result in cursor:
print(result)
finally:
connection.close() 在运行代码前,请先安装mysql.h头文件,以CentOS为例,执行如下命令:
sudo yum install mysql-devel
示例代码如下:
#include <stdio.h>
#include <mysql.h>
#include <string.h>
int main(void){
MYSQL *t_mysql;
MYSQL_RES *res = NULL;
MYSQL_ROW row;
int i, fields;
char select[] = "select * from courses";
t_mysql = mysql_init(NULL);
if(NULL == t_mysql){
printf("init failed\n");
return -1;
}
if(NULL == mysql_real_connect(t_mysql,
"<RDS_HOST>",
"<RDS_USER>",
"<RDS_PASSWORD>",
"<RDS_DATABASE>",
3306,
NULL, 0)){
printf("connect failed: %s\n", mysql_error(t_mysql));
mysql_close(t_mysql);
return -1;
}
if(mysql_real_query(t_mysql, select, strlen(select)) != 0){
printf("select failed: %s\n", mysql_error(t_mysql));
mysql_close(t_mysql);
return -1;
}
res = mysql_store_result(t_mysql);
if(NULL == res){
printf("mysql_store_result(): %s\n", mysql_error(t_mysql));
mysql_close(t_mysql);
return -1;
}
fields = mysql_num_fields(res);
while((row = mysql_fetch_row(res))){
for(i = 0; i < fields; i++){
printf("%s\t", row[i]);
}
printf("\n");
}
mysql_free_result(res);
mysql_close(t_mysql);
return 0;
} 在运行代码前,请先安装MySQL驱动:
go get -u github.com/go-sql-driver/mysql
示例代码如下:
package main
import (
"database/sql"
"fmt"
"log"
"os"
"time"
_ "github.com/go-sql-driver/mysql"
)
func getDB() (*sql.DB, error) {
host := os.Getenv("RDS_HOST")
port := os.Getenv("RDS_PORT")
user := os.Getenv("RDS_USER")
password := os.Getenv("RDS_PASSWORD")
database := os.Getenv("RDS_DATABASE")
if host == "" || user == "" || password == "" {
return nil, fmt.Errorf("缺少必要的数据库连接参数")
}
if port == "" {
port = "3306"
}
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
user, password, host, port, database)
db, err := sql.Open("mysql", dsn)
if err != nil {
return nil, err
}
db.SetMaxOpenConns(20)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(30 * time.Minute)
return db, nil
}
func main() {
db, err := getDB()
if err != nil {
log.Fatal("数据库连接失败:", err)
}
defer db.Close()
// 验证连接
if err := db.Ping(); err != nil {
log.Fatal("数据库Ping失败:", err)
}
fmt.Println("数据库连接成功")
}