更新时间:2026-07-01 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。

<RDS_PASSWORD>

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

<RDS_DATABASE>

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

在运行代码前,请先安装PyMySQL。

  • Python3安装命令:
    pip3 install PyMySQL
  • Python2安装命令:
    pip install pymysql==0.9.3

示例代码如下:

import pymysql  
connection = pymysql.connect(host='<RDS_HOST>',
                              port=<RDS_PORT>,
                             user='<RDS_USER>',
                           passwd='<RDS_PASSWORD>',
                               db='<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>intmain(void){
  MYSQL*t_mysql;MYSQL_RES*res=NULL;MYSQL_ROWrow;char*query_str=NULL;intrc,
  i,
  fields;introws;charselect[

  ]="select * from courses";//输入希望执行的SQL。t_mysql=mysql_init(NULL);if(NULL==t_mysql){
    printf("init failed\n");
  }if(NULL==mysql_real_connect(t_mysql,
  "<RDS_HOST>",
  "<RDS_USER>",
  "<RDS_PASSWORD>",
  "<RDS_DATABASE>",
  <RDS_PORT>,
  NULL,
  0)){
    printf("connect failed\n");
  }if(mysql_real_query(t_mysql,
  select,
  strlen(select))!=0){
    printf("select failed\n");
  }res=mysql_store_result(t_mysql);if(NULL==res){
    printf("mysql_restore_result(): %s\n",
    mysql_error(t_mysql));return0;
  }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_close(t_mysql);
}

在运行代码前,请先安装MySQL驱动:

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

示例代码如下:

package main

import (
"database/sql"
"fmt"
"log"
"os"
_ "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()

// 使用数据库连接执行操作
// ...
}

相关文档