更新时间:2026-08-31 GMT+08:00
分享

通过Python、C或Golang连接RDS for MySQL实例

本文介绍如何通过Python、C或Golang连接RDS for MySQL实例。

代码中的参数说明

表1 参数说明

参数

说明

<RDS_HOST>

实例的连接地址。

获取方法如下:

  • 通过内网连接实例:单击实例名称,在实例的“连接管理”页面获取实例的“内网地址”。
  • 通过公网连接实例:单击实例名称,在实例的“连接管理”页面获取实例绑定的“弹性公网IP”。

<RDS_PORT>

实例的数据库端口。

获取方法如下:

  1. 单击实例名称,进入“概览”页面。
  2. 在左侧导航栏,单击“连接管理”,查看数据库端口。

<RDS_USER>

实例的账号名称,默认root。

获取方法如下:

  1. 单击实例名称,进入“概览”页面。
  2. 在左侧导航栏,单击“数据库与账号管理”,在“账号管理”页签下查看账号名称。

<RDS_PASSWORD>

实例的账号所对应的密码。

<RDS_DATABASE>

连接的实例的数据库名称。

获取方法如下:

  1. 单击实例名称,进入“概览”页面。
  2. 在左侧导航栏,单击“数据库与账号管理”,在“数据库管理”页签下查看数据库名称。

在运行代码前,请先安装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("数据库连接成功")
}

相关文档