最佳实践

文档中心 > 云函数 > 开发指南 > 云函数接入数据库 > 使用 SCF DB SDK for MySQL 连接数据库

使用 SCF DB SDK for MySQL 连接数据库

最近更新时间:2020-07-15 10:14:40

操作场景

为了方便使用,云函数团队将 Node.js 和 Python 连接池相关代码封装为 SCF DB SDK for MySQL,请参考 依赖安装 进行安装使用。通过该 SDK,您可以在云函数代码中连接 MySQLCynosDBTDSQL 数据库,并实现对数据库的插入、查询等操作。本文介绍如何使用 SCF 连接 MySQL 数据库。

注意:

SCF DB SDK 主要支持 MySQL 协议的数据库,如果您需使用腾讯云 Serverless DB(支持 PostgreSQL 及 NoSQL),推荐使用 Serverless Framework 组件

SCF DB SDK for MySQL 具备以下特点:

  • 自动从环境变量初始化数据库客户端。
  • SDK 会在全局维护一个数据库长连接,并处理连接中断后的重连。
  • 云函数团队会持续关注 issue,确保获得连接即可用,不需要关注数据库连接。

前提条件

已注册腾讯云账号并完成实名认证。如未注册,请前往 注册页面

操作步骤

创建私有网络 VPC

参考 快速搭建私有网络 创建 VPC 和子网。

创建数据库实例

  1. 参考 购买方式 创建 MySQL。
    说明:

    配置项“网络”请选择在 创建私有网络 VPC 步骤中已创建的 VPC。

  2. 参考 初始化 MySQL 数据库 完成初始化操作,并获取数据库帐户名称及密码。
  3. 在 “MySQL - 实例列表” 页面,选择实例 ID 进入数据库详情页面,获取该数据库的内网地址所属网络内网端口信息。如下图所示:

创建安全组(可选)

可参考 云数据库安全组 为您的数据库实例添加安全组。

配置环境变量和私有网络

  1. 登录 云函数控制台,单击左侧导航栏中的【函数服务】。
  2. 单击需连接数据库的函数 ID,进入该函数的“函数配置”页面,参考以下信息进行配置。
    • 新增环境变量,请参考以下表格填写,如下图所示:
      注意:

      • 环境变量 key 格式为 DB_{引用}_XXX,您可通过 mysql.database(引用).connection() 获得已初始化的数据库连接(引用为此数据库的标识)。
      • 若您设置添加环境变量 DB_DEFAULTDB1,则 mysql.database() 默认使用 DB1,否则需要指定引用 mysql.database("DB1")
      • 更多关于环境变量相关信息,请参见 环境变量
      key value 是否可选
      DB_DB1_HOST DB1 实例的地址。
      DB_DB1_PORT DB1 实例的端口。
      DB_DB1_USER DB1 实例的用户名。
      DB_DB1_PASSWORD DB1 实例的密码。
      DB_DB1_DATABASE DB1 实例的数据库。
      DB_DEFAULT 本示例中为 “DB1”。
    • 开启私有网络,并选择和数据库相同的私有网络和子网。如下图所示:

函数代码示例

Node.js SDK

'use strict';
const database = require('scf-nodejs-serverlessdb-sdk').database;

exports.main_handler = async (event, context, callback) => {
  let pool = await database('TESTDB2').pool()
  pool.query('select * from coffee',(err,results)=>{
    console.log('db2 callback query result:',results)
  })
  // no need to release pool

  console.log('db2 query result:',result)
}
说明:

Node.js SDK 具体使用方法请参考 SCF DB SDK for MySQL

Python SDK

from serverless_db_sdk import database

def main_handler(event, context):
    print('Start Serverlsess DB SDK function')

    connection = database().connection(autocommit=False)
    cursor = connection.cursor()

    cursor.execute('SELECT * FROM name')
    myresult = cursor.fetchall()

    for x in myresult:
        print(x)
目录